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

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents f2892faa87d4
children e872639c28e3 01137c1fdbe9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
1 ;;; pascal.el --- major mode for editing pascal source in Emacs
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
28976
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
3 ;; Copyright (C) 1993, 94, 95, 96, 97, 98, 1999, 2000 Free Software Foundation, Inc.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
28976
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
5 ;; Author: Espen Skoglund <esk@gnu.org>
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
6 ;; Keywords: languages
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
8 ;; This file is part of GNU Emacs.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
14183
c7b389ac75e9 Update comment preamble.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
14183
c7b389ac75e9 Update comment preamble.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
c7b389ac75e9 Update comment preamble.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
13 ;; any later version.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
14183
c7b389ac75e9 Update comment preamble.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
18 ;; GNU General Public License for more details.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12882
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14183
c7b389ac75e9 Update comment preamble.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to
c7b389ac75e9 Update comment preamble.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
22 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
c7b389ac75e9 Update comment preamble.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
23 ;; Boston, MA 02111-1307, USA.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
27 ;; USAGE
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
28 ;; =====
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
29
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
30 ;; Emacs should enter Pascal mode when you find a Pascal source file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
31 ;; When you have entered Pascal mode, you may get more info by pressing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
32 ;; C-h m. You may also get online help describing various functions by:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
33 ;; C-h f <Name of function you want described>
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
34
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
35 ;; If you want to customize Pascal mode to fit you better, you may add
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
36 ;; these lines (the values of the variables presented here are the defaults):
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
37 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
38 ;; ;; User customization for Pascal mode
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
39 ;; (setq pascal-indent-level 3
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
40 ;; pascal-case-indent 2
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
41 ;; pascal-auto-newline nil
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
42 ;; pascal-tab-always-indent t
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
43 ;; pascal-auto-endcomments t
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
44 ;; pascal-auto-lineup '(all)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
45 ;; pascal-toggle-completions nil
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
46 ;; pascal-type-keywords '("array" "file" "packed" "char"
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
47 ;; "integer" "real" "string" "record")
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
48 ;; pascal-start-keywords '("begin" "end" "function" "procedure"
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
49 ;; "repeat" "until" "while" "read" "readln"
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
50 ;; "reset" "rewrite" "write" "writeln")
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
51 ;; pascal-separator-keywords '("downto" "else" "mod" "div" "then"))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
53 ;; KNOWN BUGS / BUGREPORTS
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
54 ;; =======================
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
55 ;; As far as I know, there are no bugs in the current version of this
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
56 ;; package. This may not be true however, since I never use this mode
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14000
diff changeset
57 ;; myself and therefore would never notice them anyway. If you do
28976
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
58 ;; find any bugs, you may submit them to: esk@gnu.org as well as to
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
59 ;; bug-gnu-emacs@gnu.org.
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
60
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
61 ;;; Code:
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
63 (defgroup pascal nil
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
64 "Major mode for editing Pascal source in Emacs"
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
65 :group 'languages)
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
66
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 (defvar pascal-mode-abbrev-table nil
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 "Abbrev table in use in Pascal-mode buffers.")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 (define-abbrev-table 'pascal-mode-abbrev-table ())
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 (defvar pascal-mode-map ()
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 "Keymap used in Pascal mode.")
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
73 (if pascal-mode-map
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
74 ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
75 (setq pascal-mode-map (make-sparse-keymap))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
76 (define-key pascal-mode-map ";" 'electric-pascal-semi-or-dot)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
77 (define-key pascal-mode-map "." 'electric-pascal-semi-or-dot)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
78 (define-key pascal-mode-map ":" 'electric-pascal-colon)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
79 (define-key pascal-mode-map "=" 'electric-pascal-equal)
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
80 (define-key pascal-mode-map "#" 'electric-pascal-hash)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
81 (define-key pascal-mode-map "\r" 'electric-pascal-terminate-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
82 (define-key pascal-mode-map "\t" 'electric-pascal-tab)
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
83 (define-key pascal-mode-map "\M-\t" 'pascal-complete-word)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
84 (define-key pascal-mode-map "\M-?" 'pascal-show-completions)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
85 (define-key pascal-mode-map "\177" 'backward-delete-char-untabify)
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
86 (define-key pascal-mode-map "\M-\C-h" 'pascal-mark-defun)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
87 (define-key pascal-mode-map "\C-c\C-b" 'pascal-insert-block)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
88 (define-key pascal-mode-map "\M-*" 'pascal-star-comment)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
89 (define-key pascal-mode-map "\C-c\C-c" 'pascal-comment-area)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
90 (define-key pascal-mode-map "\C-c\C-u" 'pascal-uncomment-area)
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
91 (define-key pascal-mode-map "\M-\C-a" 'pascal-beg-of-defun)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
92 (define-key pascal-mode-map "\M-\C-e" 'pascal-end-of-defun)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
93 (define-key pascal-mode-map "\C-c\C-d" 'pascal-goto-defun)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
94 (define-key pascal-mode-map "\C-c\C-o" 'pascal-outline)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;;; A command to change the whole buffer won't be used terribly
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;;; often, so no need for a key binding.
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
97 ; (define-key pascal-mode-map "\C-cd" 'pascal-downcase-keywords)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
98 ; (define-key pascal-mode-map "\C-cu" 'pascal-upcase-keywords)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
99 ; (define-key pascal-mode-map "\C-cc" 'pascal-capitalize-keywords)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
100 )
12689
83ef0f002ecf (pascal-mode): Added imenu support.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
101
83ef0f002ecf (pascal-mode): Added imenu support.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
102 (defvar pascal-imenu-generic-expression
43255
c440fcd3adb0 (pascal-imenu-generic-expression): Add menu-title and fix parentheses.
Eli Zaretskii <eliz@gnu.org>
parents: 28976
diff changeset
103 '((nil "^[ \t]*\\(function\\|procedure\\)[ \t\n]+\\([a-zA-Z0-9_.:]+\\)" 2))
12689
83ef0f002ecf (pascal-mode): Added imenu support.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
104 "Imenu expression for Pascal-mode. See `imenu-generic-expression'.")
17482
b758fbf989b7 (pascal-mode): Set comment-start.
Richard M. Stallman <rms@gnu.org>
parents: 16622
diff changeset
105
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
106 (defvar pascal-keywords
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
107 '("and" "array" "begin" "case" "const" "div" "do" "downto" "else" "end"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
108 "file" "for" "function" "goto" "if" "in" "label" "mod" "nil" "not" "of"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
109 "or" "packed" "procedure" "program" "record" "repeat" "set" "then" "to"
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
110 "type" "until" "var" "while" "with"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
111 ;; The following are not standard in pascal, but widely used.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
112 "get" "put" "input" "output" "read" "readln" "reset" "rewrite" "write"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
113 "writeln"))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
115 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
116 ;;; Regular expressions used to calculate indent, etc.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
117 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
118 (defconst pascal-symbol-re "\\<[a-zA-Z_][a-zA-Z_0-9.]*\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
119 (defconst pascal-beg-block-re "\\<\\(begin\\|case\\|record\\|repeat\\)\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
120 (defconst pascal-end-block-re "\\<\\(end\\|until\\)\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
121 (defconst pascal-declaration-re "\\<\\(const\\|label\\|type\\|var\\)\\>")
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
122 (defconst pascal-progbeg-re "\\<\\program\\>")
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
123 (defconst pascal-defun-re "\\<\\(function\\|procedure\\|program\\)\\>")
6123
3c66892f0083 (pascal-sub-block-re): Recognize for and with.
Richard M. Stallman <rms@gnu.org>
parents: 5723
diff changeset
124 (defconst pascal-sub-block-re "\\<\\(if\\|else\\|for\\|while\\|with\\)\\>")
6153
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
125 (defconst pascal-noindent-re "\\<\\(begin\\|end\\|until\\|else\\)\\>")
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
126 (defconst pascal-nosemi-re "\\<\\(begin\\|repeat\\|then\\|do\\|else\\)\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
127 (defconst pascal-autoindent-lines-re
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
128 "\\<\\(label\\|var\\|type\\|const\\|until\\|end\\|begin\\|repeat\\|else\\)\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
129
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
130 ;;; Strings used to mark beginning and end of excluded text
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
131 (defconst pascal-exclude-str-start "{-----\\/----- EXCLUDED -----\\/-----")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
132 (defconst pascal-exclude-str-end " -----/\\----- EXCLUDED -----/\\-----}")
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (defvar pascal-mode-syntax-table nil
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 "Syntax table in use in Pascal-mode buffers.")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (if pascal-mode-syntax-table
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 ()
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (setq pascal-mode-syntax-table (make-syntax-table))
11104
ef10b4684bb5 (pascal-mode-syntax-table): Give \ punctuation syntax.
Richard M. Stallman <rms@gnu.org>
parents: 10534
diff changeset
140 (modify-syntax-entry ?\\ "." pascal-mode-syntax-table)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
141 (modify-syntax-entry ?( "()1" pascal-mode-syntax-table)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
142 (modify-syntax-entry ?) ")(4" pascal-mode-syntax-table)
27745
8796c6b4b7c2 (pascal-mode-syntax-table): Change syntax
Gerd Moellmann <gerd@gnu.org>
parents: 25278
diff changeset
143 (modify-syntax-entry ?* ". 23b" pascal-mode-syntax-table)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
144 (modify-syntax-entry ?{ "<" pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
145 (modify-syntax-entry ?} ">" pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
146 (modify-syntax-entry ?+ "." pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
147 (modify-syntax-entry ?- "." pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
148 (modify-syntax-entry ?= "." pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
149 (modify-syntax-entry ?% "." pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
150 (modify-syntax-entry ?< "." pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
151 (modify-syntax-entry ?> "." pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
152 (modify-syntax-entry ?& "." pascal-mode-syntax-table)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
153 (modify-syntax-entry ?| "." pascal-mode-syntax-table)
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
154 (modify-syntax-entry ?_ "_" pascal-mode-syntax-table)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
155 (modify-syntax-entry ?\' "\"" pascal-mode-syntax-table))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
157 (defconst pascal-font-lock-keywords (purecopy
9387
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
158 (list
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
159 '("^[ \t]*\\(function\\|pro\\(cedure\\|gram\\)\\)\\>[ \t]*\\([a-z]\\)"
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
160 1 font-lock-keyword-face)
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
161 '("^[ \t]*\\(function\\|pro\\(cedure\\|gram\\)\\)\\>[ \t]*\\([a-z][a-z0-9_]*\\)"
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
162 3 font-lock-function-name-face t)
9387
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
163 ; ("type" "const" "real" "integer" "char" "boolean" "var"
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
164 ; "record" "array" "file")
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
165 (cons (concat "\\<\\(array\\|boolean\\|c\\(har\\|onst\\)\\|file\\|"
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
166 "integer\\|re\\(al\\|cord\\)\\|type\\|var\\)\\>")
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
167 'font-lock-type-face)
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20459
diff changeset
168 '("\\<\\(label\\|external\\|forward\\)\\>" . font-lock-constant-face)
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
169 '("\\<\\([0-9]+\\)[ \t]*:" 1 font-lock-function-name-face)
9387
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
170 ; ("of" "to" "for" "if" "then" "else" "case" "while"
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
171 ; "do" "until" "and" "or" "not" "in" "with" "repeat" "begin" "end")
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
172 (concat "\\<\\("
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
173 "and\\|begin\\|case\\|do\\|e\\(lse\\|nd\\)\\|for\\|i[fn]\\|"
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
174 "not\\|o[fr]\\|repeat\\|t\\(hen\\|o\\)\\|until\\|w\\(hile\\|ith\\)"
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
175 "\\)\\>")
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
176 '("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
177 1 font-lock-keyword-face)
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
178 '("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
179 2 font-lock-keyword-face t)))
9387
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
180 "Additional expressions to highlight in Pascal mode.")
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
181 (put 'pascal-mode 'font-lock-defaults '(pascal-font-lock-keywords nil t))
9387
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
182
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
183 (defcustom pascal-indent-level 3
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
184 "*Indentation of Pascal statements with respect to containing block."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
185 :type 'integer
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
186 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
187
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
188 (defcustom pascal-case-indent 2
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
189 "*Indentation for case statements."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
190 :type 'integer
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
191 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
192
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
193 (defcustom pascal-auto-newline nil
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
194 "*Non-nil means automatically insert newlines in certain cases.
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
195 These include after semicolons and after the punctuation mark after an `end'."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
196 :type 'boolean
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
197 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
198
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
199 (defcustom pascal-indent-nested-functions t
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
200 "*Non-nil means nested functions are indented."
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
201 :type 'boolean
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
202 :group 'pascal)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
203
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
204 (defcustom pascal-tab-always-indent t
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
205 "*Non-nil means TAB in Pascal mode should always reindent the current line.
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
206 If this is nil, TAB inserts a tab if it is at the end of the line
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
207 and follows non-whitespace text."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
208 :type 'boolean
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
209 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
210
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
211 (defcustom pascal-auto-endcomments t
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
212 "*Non-nil means automatically insert comments after certain `end's.
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
213 Specifically, this is done after the ends of cases statements and functions.
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
214 The name of the function or case is included between the braces."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
215 :type 'boolean
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
216 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
217
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
218 (defcustom pascal-auto-lineup '(all)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
219 "*List of contexts where auto lineup of :'s or ='s should be done.
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
220 Elements can be of type: 'paramlist', 'declaration' or 'case', which will
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
221 do auto lineup in parameterlist, declarations or case-statements
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
222 respectively. The word 'all' will do all lineups. '(case paramlist) for
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
223 instance will do lineup in case-statements and parameterlist, while '(all)
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
224 will do all lineups."
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
225 :type '(set :extra-offset 8
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
226 (const :tag "Everything" all)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
227 (const :tag "Parameter lists" paramlist)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
228 (const :tag "Decalrations" declaration)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
229 (const :tag "Case statements" case))
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
230 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
231
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
232 (defcustom pascal-toggle-completions nil
12882
83fd8f17cfe4 (pascal-mode): Set comment-start.
Richard M. Stallman <rms@gnu.org>
parents: 12689
diff changeset
233 "*Non-nil means \\<pascal-mode-map>\\[pascal-complete-word] should try all possible completions one by one.
83fd8f17cfe4 (pascal-mode): Set comment-start.
Richard M. Stallman <rms@gnu.org>
parents: 12689
diff changeset
234 Repeated use of \\[pascal-complete-word] will show you all of them.
83fd8f17cfe4 (pascal-mode): Set comment-start.
Richard M. Stallman <rms@gnu.org>
parents: 12689
diff changeset
235 Normally, when there is more than one possible completion,
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
236 it displays a list of all possible completions."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
237 :type 'boolean
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
238 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
239
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
240 (defcustom pascal-type-keywords
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
241 '("array" "file" "packed" "char" "integer" "real" "string" "record")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
242 "*Keywords for types used when completing a word in a declaration or parmlist.
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
243 These include integer, real, char, etc.
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
244 The types defined within the Pascal program
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
245 are handled in another way, and should not be added to this list."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
246 :type '(repeat (string :tag "Keyword"))
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
247 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
248
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
249 (defcustom pascal-start-keywords
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
250 '("begin" "end" "function" "procedure" "repeat" "until" "while"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
251 "read" "readln" "reset" "rewrite" "write" "writeln")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
252 "*Keywords to complete when standing at the first word of a statement.
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
253 These are keywords such as begin, repeat, until, readln.
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
254 The procedures and variables defined within the Pascal program
47263
21c763762fb2 (pascal-start-keywords): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 43255
diff changeset
255 are handled in another way, and should not be added to this list."
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
256 :type '(repeat (string :tag "Keyword"))
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
257 :group 'pascal)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
258
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
259 (defcustom pascal-separator-keywords
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
260 '("downto" "else" "mod" "div" "then")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
261 "*Keywords to complete when NOT standing at the first word of a statement.
17483
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
262 These are keywords such as downto, else, mod, then.
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
263 Variables and function names defined within the Pascal program
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
264 are handled in another way, and should not be added to this list."
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
265 :type '(repeat (string :tag "Keyword"))
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
266 :group 'pascal)
5f8a37eaea45 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17482
diff changeset
267
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
268
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
269 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
270 ;;; Macros
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
271 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
272
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
273 (defsubst pascal-get-beg-of-line (&optional arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
274 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
275 (beginning-of-line arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
276 (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
277
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
278 (defsubst pascal-get-end-of-line (&optional arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
279 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
280 (end-of-line arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
281 (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
282
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
283 (defun pascal-declaration-end ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
284 (let ((nest 1))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
285 (while (and (> nest 0)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
286 (re-search-forward
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
287 "[:=]\\|\\(\\<record\\>\\)\\|\\(\\<end\\>\\)"
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
288 (save-excursion (end-of-line 2) (point)) t))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
289 (cond ((match-beginning 1) (setq nest (1+ nest)))
14776
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
290 ((match-beginning 2) (setq nest (1- nest)))
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
291 ((looking-at "[^(\n]+)") (setq nest 0))))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
292
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
293
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
294 (defun pascal-declaration-beg ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
295 (let ((nest 1))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
296 (while (and (> nest 0)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
297 (re-search-backward "[:=]\\|\\<\\(type\\|var\\|label\\|const\\)\\>\\|\\(\\<record\\>\\)\\|\\(\\<end\\>\\)" (pascal-get-beg-of-line 0) t))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
298 (cond ((match-beginning 1) (setq nest 0))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
299 ((match-beginning 2) (setq nest (1- nest)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
300 ((match-beginning 3) (setq nest (1+ nest)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
301 (= nest 0)))
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
302
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
303
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
304 (defsubst pascal-within-string ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
305 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
306 (nth 3 (parse-partial-sexp (pascal-get-beg-of-line) (point)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
307
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 ;;;###autoload
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (defun pascal-mode ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
311 "Major mode for editing Pascal code. \\<pascal-mode-map>
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
312 TAB indents for Pascal code. Delete converts tabs to spaces as it moves back.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
313
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
314 \\[pascal-complete-word] completes the word around current point with respect \
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
315 to position in code
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
316 \\[pascal-show-completions] shows all possible completions at this point.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
317
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
318 Other useful functions are:
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
319
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
320 \\[pascal-mark-defun]\t- Mark function.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
321 \\[pascal-insert-block]\t- insert begin ... end;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
322 \\[pascal-star-comment]\t- insert (* ... *)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
323 \\[pascal-comment-area]\t- Put marked area in a comment, fixing nested comments.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
324 \\[pascal-uncomment-area]\t- Uncomment an area commented with \
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
325 \\[pascal-comment-area].
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
326 \\[pascal-beg-of-defun]\t- Move to beginning of current function.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
327 \\[pascal-end-of-defun]\t- Move to end of current function.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
328 \\[pascal-goto-defun]\t- Goto function prompted for in the minibuffer.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
329 \\[pascal-outline]\t- Enter pascal-outline-mode (see also pascal-outline).
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
330
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
331 Variables controlling indentation/edit style:
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
332
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
333 pascal-indent-level (default 3)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
334 Indentation of Pascal statements with respect to containing block.
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
335 pascal-case-indent (default 2)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
336 Indentation for case statements.
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
337 pascal-auto-newline (default nil)
14000
36dc9ede3562 (pascal-auto-newline, pascal-mode, electric-pascal-hash):
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
338 Non-nil means automatically newline after semicolons and the punctuation
36dc9ede3562 (pascal-auto-newline, pascal-mode, electric-pascal-hash):
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
339 mark after an end.
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
340 pascal-indent-nested-functions (default t)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
341 Non-nil means nested functions are indented.
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
342 pascal-tab-always-indent (default t)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 Non-nil means TAB in Pascal mode should always reindent the current line,
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 regardless of where in the line point is when the TAB command is used.
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
345 pascal-auto-endcomments (default t)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
346 Non-nil means a comment { ... } is set after the ends which ends cases and
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
347 functions. The name of the function or case will be set between the braces.
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
348 pascal-auto-lineup (default t)
17482
b758fbf989b7 (pascal-mode): Set comment-start.
Richard M. Stallman <rms@gnu.org>
parents: 16622
diff changeset
349 List of contexts where auto lineup of :'s or ='s should be done.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
351 See also the user variables pascal-type-keywords, pascal-start-keywords and
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
352 pascal-separator-keywords.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 Turning on Pascal mode calls the value of the variable pascal-mode-hook with
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 no args, if that value is non-nil."
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (kill-all-local-variables)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (use-local-map pascal-mode-map)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (setq major-mode 'pascal-mode)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 (setq mode-name "Pascal")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (setq local-abbrev-table pascal-mode-abbrev-table)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (set-syntax-table pascal-mode-syntax-table)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 (make-local-variable 'indent-line-function)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 (setq indent-line-function 'pascal-indent-line)
16622
9811f1144bbf (pascal-mode): Make comment-indent-function buffer local.
Richard M. Stallman <rms@gnu.org>
parents: 16466
diff changeset
365 (make-local-variable 'comment-indent-function)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
366 (setq comment-indent-function 'pascal-indent-comment)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 (make-local-variable 'parse-sexp-ignore-comments)
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
368 (setq parse-sexp-ignore-comments nil)
23594
05e90accc380 (pascal-mode): `blink-matching-paren-dont-ignore-comments' set to t.
Karl Heuer <kwzh@gnu.org>
parents: 22682
diff changeset
369 (make-local-variable 'blink-matching-paren-dont-ignore-comments)
05e90accc380 (pascal-mode): `blink-matching-paren-dont-ignore-comments' set to t.
Karl Heuer <kwzh@gnu.org>
parents: 22682
diff changeset
370 (setq blink-matching-paren-dont-ignore-comments t)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (make-local-variable 'case-fold-search)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 (setq case-fold-search t)
12882
83fd8f17cfe4 (pascal-mode): Set comment-start.
Richard M. Stallman <rms@gnu.org>
parents: 12689
diff changeset
373 (make-local-variable 'comment-start)
83fd8f17cfe4 (pascal-mode): Set comment-start.
Richard M. Stallman <rms@gnu.org>
parents: 12689
diff changeset
374 (setq comment-start "{")
9387
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
375 (make-local-variable 'comment-start-skip)
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
376 (setq comment-start-skip "(\\*+ *\\|{ *")
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
377 (make-local-variable 'comment-end)
ccd27c6ef48d (pascal-font-lock-keywords): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8689
diff changeset
378 (setq comment-end "}")
12689
83ef0f002ecf (pascal-mode): Added imenu support.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
379 ;; Font lock support
9479
ef7c2b4dfee4 * pascal.el: (pascal-mode): Set font-lock-defaults.
Simon Marshall <simon@gnu.org>
parents: 9387
diff changeset
380 (make-local-variable 'font-lock-defaults)
ef7c2b4dfee4 * pascal.el: (pascal-mode): Set font-lock-defaults.
Simon Marshall <simon@gnu.org>
parents: 9387
diff changeset
381 (setq font-lock-defaults '(pascal-font-lock-keywords nil t))
12689
83ef0f002ecf (pascal-mode): Added imenu support.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
382 ;; Imenu support
83ef0f002ecf (pascal-mode): Added imenu support.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
383 (make-local-variable 'imenu-generic-expression)
83ef0f002ecf (pascal-mode): Added imenu support.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
384 (setq imenu-generic-expression pascal-imenu-generic-expression)
20459
90f306f86f5d Use imenu-case-fold-search.
Dave Love <fx@gnu.org>
parents: 19148
diff changeset
385 (setq imenu-case-fold-search t)
62772
f2892faa87d4 * progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
386 (run-mode-hooks 'pascal-mode-hook))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
388
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
389
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 ;;;
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 ;;; Electric functions
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 ;;;
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 (defun electric-pascal-terminate-line ()
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 "Terminate line and indent next line."
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 (interactive)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
396 ;; First, check if current line should be indented
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 (beginning-of-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (skip-chars-forward " \t")
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
400 (if (looking-at pascal-autoindent-lines-re)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 (pascal-indent-line)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
402 (delete-horizontal-space) ; Removes trailing whitespaces
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (newline)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
404 ;; Indent next line
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (pascal-indent-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 ;; Maybe we should set some endcomments
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 (if pascal-auto-endcomments
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (pascal-set-auto-comments))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 ;; Check if we shall indent inside comment
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (let ((setstar nil))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (forward-line -1)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (skip-chars-forward " \t")
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
414 (cond ((looking-at "\\*[ \t]+)")
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 ;; Delete region between `*' and `)' if there is only whitespaces.
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (forward-char 1)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
417 (delete-horizontal-space))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 ((and (looking-at "(\\*\\|\\*[^)]")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 (not (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (search-forward "*)" (pascal-get-end-of-line) t))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 (setq setstar t))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 ;; If last line was a star comment line then this one shall be too.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
423 (if (null setstar)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
424 (pascal-indent-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
425 (insert "* "))))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
428 (defun electric-pascal-semi-or-dot ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
429 "Insert `;' or `.' character and reindent the line."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 (insert last-command-char)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (beginning-of-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (pascal-indent-line))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (if pascal-auto-newline
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 (electric-pascal-terminate-line)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (defun electric-pascal-colon ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
439 "Insert `:' and do all indentions except line indent on this line."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (insert last-command-char)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
442 ;; Do nothing if within string.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
443 (if (pascal-within-string)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
444 ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
445 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
446 (beginning-of-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
447 (pascal-indent-line))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
448 (let ((pascal-tab-always-indent nil))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
449 (pascal-indent-command))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
450
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (defun electric-pascal-equal ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
452 "Insert `=', and do indention if within type declaration."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (insert last-command-char)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
455 (if (eq (car (pascal-calculate-indent)) 'declaration)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 (let ((pascal-tab-always-indent nil))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (pascal-indent-command))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
459 (defun electric-pascal-hash ()
14000
36dc9ede3562 (pascal-auto-newline, pascal-mode, electric-pascal-hash):
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
460 "Insert `#', and indent to column 0 if this is a CPP directive."
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
461 (interactive)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
462 (insert last-command-char)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
463 (if (save-excursion (beginning-of-line) (looking-at "^[ \t]*#"))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
464 (save-excursion (beginning-of-line)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
465 (delete-horizontal-space))))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
466
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (defun electric-pascal-tab ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
468 "Function called when TAB is pressed in Pascal mode."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (interactive)
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
470 ;; Do nothing if within a string or in a CPP directive.
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
471 (if (or (pascal-within-string)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
472 (and (not (bolp))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
473 (save-excursion (beginning-of-line) (eq (following-char) ?#))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
474 (insert "\t")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
475 ;; If pascal-tab-always-indent, indent the beginning of the line.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
476 (if pascal-tab-always-indent
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
477 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
478 (beginning-of-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
479 (pascal-indent-line))
14776
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
480 (if (save-excursion
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
481 (skip-chars-backward " \t")
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
482 (bolp))
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
483 (pascal-indent-line)
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
484 (insert "\t")))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
485 (pascal-indent-command)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
486
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
487
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 ;;;
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 ;;; Interactive functions
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 ;;;
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 (defun pascal-insert-block ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
493 "Insert Pascal begin ... end; block in the code with right indentation."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 (insert "begin")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (electric-pascal-terminate-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 (save-excursion
22682
c283610d2a74 (pascal-insert-block): Fixed space-deletion bug in
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
498 (newline)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 (insert "end;")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (beginning-of-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 (pascal-indent-line)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (defun pascal-star-comment ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
504 "Insert Pascal star comment at point."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 (pascal-indent-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (insert "(*")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (electric-pascal-terminate-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 (electric-pascal-terminate-line)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
511 (delete-horizontal-space)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
512 (insert ")"))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
513 (insert " "))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
515 (defun pascal-mark-defun ()
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 "Mark the current pascal function (or procedure).
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
517 This puts the mark at the end, and point at the beginning."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 (push-mark (point))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
520 (pascal-end-of-defun)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 (push-mark (point))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
522 (pascal-beg-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
523 (if (fboundp 'zmacs-activate-region)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
524 (zmacs-activate-region)))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 (defun pascal-comment-area (start end)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
527 "Put the region into a Pascal comment.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
528 The comments that are in this area are \"deformed\":
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
529 `*)' becomes `!(*' and `}' becomes `!{'.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
530 These deformed comments are returned to normal if you use
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
531 \\[pascal-uncomment-area] to undo the commenting.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
532
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
533 The commented area starts with `pascal-exclude-str-start', and ends with
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
534 `pascal-include-str-end'. But if you change these variables,
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
535 \\[pascal-uncomment-area] won't recognize the comments."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (interactive "r")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 ;; Insert start and endcomments
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 (goto-char end)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 (if (and (save-excursion (skip-chars-forward " \t") (eolp))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (not (save-excursion (skip-chars-backward " \t") (bolp))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (forward-line 1)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (beginning-of-line))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
544 (insert pascal-exclude-str-end)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (setq end (point))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 (newline)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 (goto-char start)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 (beginning-of-line)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
549 (insert pascal-exclude-str-start)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 (newline)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 ;; Replace end-comments within commented area
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (goto-char end)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 (while (re-search-backward "\\*)" start t)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (replace-match "!(*" t t)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 (while (re-search-backward "}" start t)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 (replace-match "!{" t t)))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (defun pascal-uncomment-area ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
561 "Uncomment a commented area; change deformed comments back to normal.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
562 This command does nothing if the pointer is not in a commented
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 area. See also `pascal-comment-area'."
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (let ((start (point))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 (end (point)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 ;; Find the boundaries of the comment
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (save-excursion
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
570 (setq start (progn (search-backward pascal-exclude-str-start nil t)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (point)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
572 (setq end (progn (search-forward pascal-exclude-str-end nil t)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 (point))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 ;; Check if we're really inside a comment
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (if (or (equal start (point)) (<= end (point)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (message "Not standing within commented area.")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (progn
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 ;; Remove endcomment
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (goto-char end)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (beginning-of-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (let ((pos (point)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (end-of-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (delete-region pos (1+ (point))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 ;; Change comments back to normal
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (while (re-search-backward "!{" start t)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 (replace-match "}" t t)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 (while (re-search-backward "!(\\*" start t)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 (replace-match "*)" t t)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 ;; Remove startcomment
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 (goto-char start)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (beginning-of-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (let ((pos (point)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (end-of-line)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (delete-region pos (1+ (point)))))))))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
598 (defun pascal-beg-of-defun ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
599 "Move backward to the beginning of the current function or procedure."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 (interactive)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
601 (catch 'found
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
602 (if (not (looking-at (concat "\\s \\|\\s)\\|" pascal-defun-re)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
603 (forward-sexp 1))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
604 (let ((nest 0) (max -1) (func 0)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
605 (reg (concat pascal-beg-block-re "\\|"
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
606 pascal-end-block-re "\\|"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
607 pascal-defun-re)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
608 (while (re-search-backward reg nil 'move)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
609 (cond ((let ((state (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
610 (parse-partial-sexp (point-min) (point)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
611 (or (nth 3 state) (nth 4 state))) ; Inside string or comment
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
612 ())
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
613 ((match-end 1) ; begin|case|record|repeat
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
614 (if (and (looking-at "\\<record\\>") (>= max 0))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
615 (setq func (1- func)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
616 (setq nest (1+ nest)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
617 max (max nest max)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
618 ((match-end 2) ; end|until
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
619 (if (and (= nest max) (>= max 0))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
620 (setq func (1+ func)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
621 (setq nest (1- nest)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
622 ((match-end 3) ; function|procedure
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
623 (if (= 0 func)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
624 (throw 'found t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
625 (setq func (1- func)))))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
626 nil))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
628 (defun pascal-end-of-defun ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
629 "Move forward to the end of the current function or procedure."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 (interactive)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
631 (if (looking-at "\\s ")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
632 (forward-sexp 1))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
633 (if (not (looking-at pascal-defun-re))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
634 (pascal-beg-of-defun))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
635 (forward-char 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
636 (let ((nest 0) (func 1)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
637 (reg (concat pascal-beg-block-re "\\|"
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
638 pascal-end-block-re "\\|"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
639 pascal-defun-re)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
640 (while (and (/= func 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
641 (re-search-forward reg nil 'move))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
642 (cond ((let ((state (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
643 (parse-partial-sexp (point-min) (point)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
644 (or (nth 3 state) (nth 4 state))) ; Inside string or comment
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
645 ())
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
646 ((match-end 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
647 (setq nest (1+ nest))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
648 (if (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
649 (goto-char (match-beginning 0))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
650 (looking-at "\\<record\\>"))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
651 (setq func (1+ func))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
652 ((match-end 2)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
653 (setq nest (1- nest))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
654 (if (= nest 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
655 (setq func (1- func))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
656 ((match-end 3)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
657 (setq func (1+ func))))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
658 (forward-line 1))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
660 (defun pascal-end-of-statement ()
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
661 "Move forward to end of current statement."
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
662 (interactive)
15230
307b7c77a5e5 (pascal-end-of-statement, pascal-calculate-indent):
Richard M. Stallman <rms@gnu.org>
parents: 14776
diff changeset
663 (let ((parse-sexp-ignore-comments t)
307b7c77a5e5 (pascal-end-of-statement, pascal-calculate-indent):
Richard M. Stallman <rms@gnu.org>
parents: 14776
diff changeset
664 (nest 0) pos
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
665 (regexp (concat "\\(" pascal-beg-block-re "\\)\\|\\("
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
666 pascal-end-block-re "\\)")))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
667 (if (not (looking-at "[ \t\n]")) (forward-sexp -1))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
668 (or (looking-at pascal-beg-block-re)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
669 ;; Skip to end of statement
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
670 (setq pos (catch 'found
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
671 (while t
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
672 (forward-sexp 1)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
673 (cond ((looking-at "[ \t]*;")
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
674 (skip-chars-forward "^;")
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
675 (forward-char 1)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
676 (throw 'found (point)))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
677 ((save-excursion
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
678 (forward-sexp -1)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
679 (looking-at pascal-beg-block-re))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
680 (goto-char (match-beginning 0))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
681 (throw 'found nil))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
682 ((eobp)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
683 (throw 'found (point))))))))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
684 (if (not pos)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
685 ;; Skip a whole block
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
686 (catch 'found
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
687 (while t
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
688 (re-search-forward regexp nil 'move)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
689 (setq nest (if (match-end 1)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
690 (1+ nest)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
691 (1- nest)))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
692 (cond ((eobp)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
693 (throw 'found (point)))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
694 ((= 0 nest)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
695 (throw 'found (pascal-end-of-statement))))))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
696 pos)))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
697
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (defun pascal-downcase-keywords ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
699 "Downcase all Pascal keywords in the buffer."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 (pascal-change-keywords 'downcase-word))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (defun pascal-upcase-keywords ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
704 "Upcase all Pascal keywords in the buffer."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (pascal-change-keywords 'upcase-word))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (defun pascal-capitalize-keywords ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
709 "Capitalize all Pascal keywords in the buffer."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 (interactive)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 (pascal-change-keywords 'capitalize-word))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
713 ;; Change the keywords according to argument.
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (defun pascal-change-keywords (change-word)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (save-excursion
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
716 (let ((keyword-re (concat "\\<\\("
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
717 (mapconcat 'identity pascal-keywords "\\|")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
718 "\\)\\>")))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
719 (goto-char (point-min))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
720 (while (re-search-forward keyword-re nil t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
721 (funcall change-word -1)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
722
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
723
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 ;;;
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 ;;; Other functions
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 ;;;
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (defun pascal-set-auto-comments ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
729 "Insert `{ case }' or `{ NAME }' on this line if appropriate.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
730 Insert `{ case }' if there is an `end' on the line which
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
731 ends a case block. Insert `{ NAME }' if there is an `end'
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
732 on the line which ends a function or procedure named NAME."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (forward-line -1)
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (skip-chars-forward " \t")
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
736 (if (and (looking-at "\\<end;")
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (not (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 (end-of-line)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
739 (search-backward "{" (pascal-get-beg-of-line) t))))
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
740 (let ((type (car (pascal-calculate-indent))))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
741 (if (eq type 'declaration)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
742 ()
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
743 (if (eq type 'case)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
744 ;; This is a case block
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
745 (progn
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
746 (end-of-line)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
747 (delete-horizontal-space)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
748 (insert " { case }"))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
749 (let ((nest 1))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
750 ;; Check if this is the end of a function
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
751 (save-excursion
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
752 (while (not (or (looking-at pascal-defun-re) (bobp)))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
753 (backward-sexp 1)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
754 (cond ((looking-at pascal-beg-block-re)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
755 (setq nest (1- nest)))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
756 ((looking-at pascal-end-block-re)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
757 (setq nest (1+ nest)))))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
758 (if (bobp)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
759 (setq nest 1)))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
760 (if (zerop nest)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
761 (progn
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
762 (end-of-line)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
763 (delete-horizontal-space)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
764 (insert " { ")
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
765 (let (b e)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
766 (save-excursion
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
767 (setq b (progn (pascal-beg-of-defun)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
768 (skip-chars-forward "^ \t")
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
769 (skip-chars-forward " \t")
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
770 (point))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
771 e (progn (skip-chars-forward "a-zA-Z0-9_")
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
772 (point))))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
773 (insert-buffer-substring (current-buffer) b e))
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
774 (insert " }"))))))))))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
776
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
777
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 ;;;
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
779 ;;; Indentation
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
780 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
781 (defconst pascal-indent-alist
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
782 '((block . (+ ind pascal-indent-level))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
783 (case . (+ ind pascal-case-indent))
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
784 (caseblock . ind) (cpp . 0)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
785 (declaration . (+ ind pascal-indent-level))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
786 (paramlist . (pascal-indent-paramlist t))
28976
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
787 (comment . (pascal-indent-comment))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
788 (defun . ind) (contexp . ind)
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
789 (unknown . ind) (string . 0) (progbeg . 0)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
790
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 (defun pascal-indent-command ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
792 "Indent for special part of code."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
793 (let* ((indent-str (pascal-calculate-indent))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
794 (type (car indent-str))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
795 (ind (car (cdr indent-str))))
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
796 (cond ((and (eq type 'paramlist)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
797 (or (memq 'all pascal-auto-lineup)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
798 (memq 'paramlist pascal-auto-lineup)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
799 (pascal-indent-paramlist)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
800 (pascal-indent-paramlist))
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
801 ((and (eq type 'declaration)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
802 (or (memq 'all pascal-auto-lineup)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
803 (memq 'declaration pascal-auto-lineup)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
804 (pascal-indent-declaration))
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
805 ((and (eq type 'case) (not (looking-at "^[ \t]*$"))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
806 (or (memq 'all pascal-auto-lineup)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
807 (memq 'case pascal-auto-lineup)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
808 (pascal-indent-case)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
809 (if (looking-at "[ \t]+$")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
810 (skip-chars-forward " \t"))))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 (defun pascal-indent-line ()
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
813 "Indent current line as a Pascal statement."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
814 (let* ((indent-str (pascal-calculate-indent))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
815 (type (car indent-str))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
816 (ind (car (cdr indent-str))))
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
817 ;; Labels should not be indented.
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
818 (if (and (looking-at "^[0-9a-zA-Z]+[ \t]*:[^=]")
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
819 (not (eq type 'declaration)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
820 (search-forward ":" nil t))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
821 (delete-horizontal-space)
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
822 (cond (; Some things should not be indented
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
823 (or (and (eq type 'declaration) (looking-at pascal-declaration-re))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
824 (eq type 'cpp))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
825 ())
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
826 (; Other things should have no extra indent
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
827 (looking-at pascal-noindent-re)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
828 (indent-to ind))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
829 (; Nested functions should be indented
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
830 (looking-at pascal-defun-re)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
831 (if (and pascal-indent-nested-functions
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
832 (eq type 'defun))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
833 (indent-to (+ ind pascal-indent-level))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
834 (indent-to ind)))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
835 (; But most lines are treated this way
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
836 (indent-to (eval (cdr (assoc type pascal-indent-alist))))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
837 ))))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
839 (defun pascal-calculate-indent ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
840 "Calculate the indent of the current Pascal line.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
841 Return a list of two elements: (INDENT-TYPE INDENT-LEVEL)."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
842 (save-excursion
15230
307b7c77a5e5 (pascal-end-of-statement, pascal-calculate-indent):
Richard M. Stallman <rms@gnu.org>
parents: 14776
diff changeset
843 (let* ((parse-sexp-ignore-comments t)
307b7c77a5e5 (pascal-end-of-statement, pascal-calculate-indent):
Richard M. Stallman <rms@gnu.org>
parents: 14776
diff changeset
844 (oldpos (point))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
845 (state (save-excursion (parse-partial-sexp (point-min) (point))))
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
846 (nest 0) (par 0) (complete (looking-at "[ \t]*end\\>"))
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
847 (elsed (looking-at "[ \t]*else\\>")) (funccnt 0)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
848 (did-func (looking-at "[ \t]*\\(procedure\\|function\\)\\>"))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
849 (type (catch 'nesting
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
850 ;; Check if inside a string, comment or parenthesis
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
851 (cond ((nth 3 state) (throw 'nesting 'string))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
852 ((nth 4 state) (throw 'nesting 'comment))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
853 ((> (car state) 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
854 (goto-char (scan-lists (point) -1 (car state)))
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
855 (setq par (1+ (current-column))))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
856 ((save-excursion (beginning-of-line)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
857 (eq (following-char) ?#))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
858 (throw 'nesting 'cpp)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
859 ;; Loop until correct indent is found
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
860 (while t
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
861 (backward-sexp 1)
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
862 (cond (;--Escape from case statements
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
863 (and (looking-at "[A-Za-z0-9]+[ \t]*:[^=]")
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
864 (not complete)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
865 (save-excursion (skip-chars-backward " \t")
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
866 (bolp))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
867 (= (save-excursion
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
868 (end-of-line) (backward-sexp) (point))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
869 (point))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
870 (> (save-excursion (goto-char oldpos)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
871 (beginning-of-line)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
872 (point))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
873 (point)))
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
874 (throw 'nesting 'caseblock))
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
875 (;--Beginning of program
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
876 (looking-at pascal-progbeg-re)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
877 (throw 'nesting 'progbeg))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
878 (;--No known statements
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
879 (bobp)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
880 (throw 'nesting 'progbeg))
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
881 (;--Nest block outwards
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
882 (looking-at pascal-beg-block-re)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
883 (if (= nest 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
884 (cond ((looking-at "case\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
885 (throw 'nesting 'case))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
886 ((looking-at "record\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
887 (throw 'nesting 'declaration))
6153
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
888 (t (throw 'nesting 'block)))
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
889 (if (and (looking-at "record\\>") (= nest 1))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
890 (setq funccnt (1- funccnt)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
891 (setq nest (1- nest))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
892 (;--Nest block inwards
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
893 (looking-at pascal-end-block-re)
6153
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
894 (if (and (looking-at "end\\s ")
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
895 elsed (not complete))
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
896 (throw 'nesting 'block))
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
897 (if (= nest 0)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
898 (setq funccnt (1+ funccnt)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
899 (setq complete t
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
900 nest (1+ nest)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
901 (;--Defun (or parameter list)
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
902 (and (looking-at pascal-defun-re)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
903 (progn (setq funccnt (1- funccnt)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
904 did-func t)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
905 (or (bolp) (< funccnt 0))))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
906 ;; Prevent searching whole buffer
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
907 (if (and (bolp) (>= funccnt 0))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
908 (throw 'nesting 'progbeg))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
909 (if (= 0 par)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
910 (throw 'nesting 'defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
911 (setq par 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
912 (let ((n 0))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
913 (while (re-search-forward
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
914 "\\(\\<record\\>\\)\\|\\<end\\>"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
915 oldpos t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
916 (if (match-end 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
917 (setq n (1+ n)) (setq n (1- n))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
918 (if (> n 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
919 (throw 'nesting 'declaration)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
920 (throw 'nesting 'paramlist)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
921 (;--Declaration part
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
922 (and (looking-at pascal-declaration-re)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
923 (not did-func)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
924 (= funccnt 0))
6153
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
925 (if (save-excursion
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
926 (goto-char oldpos)
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
927 (forward-line -1)
40e4038bd544 (pascal-calculate-indent): Fixed indentation bug
Richard M. Stallman <rms@gnu.org>
parents: 6123
diff changeset
928 (looking-at "^[ \t]*$"))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
929 (throw 'nesting 'unknown)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
930 (throw 'nesting 'declaration)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
931 (;--If, else or while statement
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
932 (and (not complete)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
933 (looking-at pascal-sub-block-re))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
934 (throw 'nesting 'block))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
935 (;--Found complete statement
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
936 (save-excursion (forward-sexp 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
937 (= (following-char) ?\;))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
938 (setq complete t))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
939 )))))
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
940
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
941 ;; Return type of block and indent level.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
942 (if (> par 0) ; Unclosed Parenthesis
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
943 (list 'contexp par)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
944 (list type (pascal-indent-level))))))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
946 (defun pascal-indent-level ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
947 "Return the indent-level the current statement has.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
948 Do not count labels, case-statements or records."
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 (save-excursion
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 (beginning-of-line)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
951 (if (looking-at "[ \t]*[0-9a-zA-Z]+[ \t]*:[^=]")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
952 (search-forward ":" nil t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
953 (if (looking-at ".*=[ \t]*record\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
954 (search-forward "=" nil t)))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 (skip-chars-forward " \t")
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 (current-column)))
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957
28976
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
958 (defun pascal-indent-comment ()
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
959 "Return indent for current comment."
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
960 (save-excursion
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
961 (re-search-backward "\\((\\*\\)\\|{" nil t)
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
962 (if (match-beginning 1)
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
963 (1+ (current-column))
cd57818019f8 (pascal-indent-alist, pascal-indent-comment): Changed
Gerd Moellmann <gerd@gnu.org>
parents: 27745
diff changeset
964 (current-column))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
965
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
966 (defun pascal-indent-case ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
967 "Indent within case statements."
15230
307b7c77a5e5 (pascal-end-of-statement, pascal-calculate-indent):
Richard M. Stallman <rms@gnu.org>
parents: 14776
diff changeset
968 (let ((savepos (point-marker))
307b7c77a5e5 (pascal-end-of-statement, pascal-calculate-indent):
Richard M. Stallman <rms@gnu.org>
parents: 14776
diff changeset
969 (end (prog2
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
970 (end-of-line)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
971 (point-marker)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
972 (re-search-backward "\\<case\\>" nil t)))
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
973 (beg (point)) oldpos
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
974 (ind 0))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
975 ;; Get right indent
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
976 (while (< (point) end)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
977 (if (re-search-forward
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
978 "^[ \t]*[^ \t,:]+[ \t]*\\(,[ \t]*[^ \t,:]+[ \t]*\\)*:"
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
979 (marker-position end) 'move)
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
980 (forward-char -1))
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
981 (if (< (point) end)
14776
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
982 (progn
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
983 (delete-horizontal-space)
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
984 (if (> (current-column) ind)
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
985 (setq ind (current-column)))
d392e3ffa1bb (pascal-declaration-end): Now locates the end of a parameterlist correctly.
Richard M. Stallman <rms@gnu.org>
parents: 14183
diff changeset
986 (pascal-end-of-statement))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
987 (goto-char beg)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
988 (setq oldpos (marker-position end))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
989 ;; Indent all case statements
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
990 (while (< (point) end)
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
991 (if (re-search-forward
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
992 "^[ \t]*[^][ \t,\\.:]+[ \t]*\\(,[ \t]*[^ \t,:]+[ \t]*\\)*:"
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
993 (marker-position end) 'move)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
994 (forward-char -1))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
995 (indent-to (1+ ind))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
996 (if (/= (following-char) ?:)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
997 ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
998 (forward-char 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
999 (delete-horizontal-space)
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1000 (insert " "))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1001 (setq oldpos (point))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1002 (pascal-end-of-statement))
15230
307b7c77a5e5 (pascal-end-of-statement, pascal-calculate-indent):
Richard M. Stallman <rms@gnu.org>
parents: 14776
diff changeset
1003 (goto-char savepos)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1004
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1005 (defun pascal-indent-paramlist (&optional arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1006 "Indent current line in parameterlist.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1007 If optional arg is non-nil, just return the
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1008 indent of the current line in parameterlist."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1009 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1010 (let* ((oldpos (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1011 (stpos (progn (goto-char (scan-lists (point) -1 1)) (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1012 (stcol (1+ (current-column)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1013 (edpos (progn (pascal-declaration-end)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1014 (search-backward ")" (pascal-get-beg-of-line) t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1015 (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1016 (usevar (re-search-backward "\\<var\\>" stpos t)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1017 (if arg (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1018 ;; If arg, just return indent
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1019 (goto-char oldpos)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1020 (beginning-of-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1021 (if (or (not usevar) (looking-at "[ \t]*var\\>"))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1022 stcol (+ 4 stcol)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1023 (goto-char stpos)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1024 (forward-char 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1025 (delete-horizontal-space)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1026 (if (and usevar (not (looking-at "var\\>")))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1027 (indent-to (+ 4 stcol)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1028 (pascal-indent-declaration nil stpos edpos)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1029
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1030 (defun pascal-indent-declaration (&optional arg start end)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1031 "Indent current lines as declaration, lining up the `:'s or `='s."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1032 (let ((pos (point-marker)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1033 (if (and (not (or arg start)) (not (pascal-declaration-beg)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1034 ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1035 (let ((lineup (if (or (looking-at "\\<var\\>\\|\\<record\\>") arg start)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1036 ":" "="))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1037 (stpos (if start start
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1038 (forward-word 2) (backward-word 1) (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1039 (edpos (set-marker (make-marker)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1040 (if end end
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1041 (max (progn (pascal-declaration-end)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1042 (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1043 pos))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1044 ind)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1045
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1046 (goto-char stpos)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1047 ;; Indent lines in record block
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1048 (if arg
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
1049 (while (<= (point) edpos)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1050 (beginning-of-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1051 (delete-horizontal-space)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1052 (if (looking-at "end\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1053 (indent-to arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1054 (indent-to (+ arg pascal-indent-level)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1055 (forward-line 1)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1056
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1057 ;; Do lineup
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1058 (setq ind (pascal-get-lineup-indent stpos edpos lineup))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1059 (goto-char stpos)
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
1060 (while (and (<= (point) edpos) (not (eobp)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1061 (if (search-forward lineup (pascal-get-end-of-line) 'move)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1062 (forward-char -1))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1063 (delete-horizontal-space)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1064 (indent-to ind)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1065 (if (not (looking-at lineup))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1066 (forward-line 1) ; No more indent if there is no : or =
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1067 (forward-char 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1068 (delete-horizontal-space)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1069 (insert " ")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1070 ;; Indent record block
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1071 (if (looking-at "record\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1072 (pascal-indent-declaration (current-column)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1073 (forward-line 1)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1074
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1075 ;; If arg - move point
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1076 (if arg (forward-line -1)
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
1077 (goto-char pos))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1078
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1079 ; "Return the indent level that will line up several lines within the region
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1080 ;from b to e nicely. The lineup string is str."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1081 (defun pascal-get-lineup-indent (b e str)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1082 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1083 (let ((ind 0)
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1084 (reg (concat str "\\|\\(\\<record\\>\\)\\|" pascal-defun-re)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1085 (goto-char b)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1086 ;; Get rightmost position
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1087 (while (< (point) e)
24944
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1088 (and (re-search-forward reg (min e (pascal-get-end-of-line 2)) 'move)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1089 (cond ((match-beginning 1)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1090 ;; Skip record blocks
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1091 (pascal-declaration-end))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1092 ((match-beginning 2)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1093 ;; We have entered a new procedure. Exit.
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1094 (goto-char e))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1095 (t
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1096 (goto-char (match-beginning 0))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1097 (skip-chars-backward " \t")
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1098 (if (> (current-column) ind)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1099 (setq ind (current-column)))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1100 (goto-char (match-end 0))
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1101 (end-of-line)
052b3b8dcccc (pascal-beg-of-defun): More intuitive behavior when having nested functons.
Richard M. Stallman <rms@gnu.org>
parents: 24118
diff changeset
1102 ))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1103 ;; In case no lineup was found
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1104 (if (> ind 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1105 (1+ ind)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1106 ;; No lineup-string found
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1107 (goto-char b)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1108 (end-of-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1109 (skip-chars-backward " \t")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1110 (1+ (current-column))))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1111
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1112
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1114 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1115 ;;; Completion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1116 ;;;
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1117 (defvar pascal-str nil)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1118 (defvar pascal-all nil)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1119 (defvar pascal-pred nil)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1120 (defvar pascal-buffer-to-use nil)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1121 (defvar pascal-flag nil)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1122
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1123 (defun pascal-string-diff (str1 str2)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1124 "Return index of first letter where STR1 and STR2 differs."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1125 (catch 'done
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1126 (let ((diff 0))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1127 (while t
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1128 (if (or (> (1+ diff) (length str1))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1129 (> (1+ diff) (length str2)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1130 (throw 'done diff))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1131 (or (equal (aref str1 diff) (aref str2 diff))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1132 (throw 'done diff))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1133 (setq diff (1+ diff))))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1134
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1135 ;; Calculate all possible completions for functions if argument is `function',
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1136 ;; completions for procedures if argument is `procedure' or both functions and
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1137 ;; procedures otherwise.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1138
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1139 (defun pascal-func-completion (type)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1140 ;; Build regular expression for function/procedure names
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1141 (if (string= pascal-str "")
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1142 (setq pascal-str "[a-zA-Z_]"))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1143 (let ((pascal-str (concat (cond
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1144 ((eq type 'procedure) "\\<\\(procedure\\)\\s +")
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1145 ((eq type 'function) "\\<\\(function\\)\\s +")
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1146 (t "\\<\\(function\\|procedure\\)\\s +"))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1147 "\\<\\(" pascal-str "[a-zA-Z0-9_.]*\\)\\>"))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1148 match)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1149
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1150 (if (not (looking-at "\\<\\(function\\|procedure\\)\\>"))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1151 (re-search-backward "\\<\\(function\\|procedure\\)\\>" nil t))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1152 (forward-char 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1153
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1154 ;; Search through all reachable functions
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1155 (while (pascal-beg-of-defun)
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1156 (if (re-search-forward pascal-str (pascal-get-end-of-line) t)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1157 (progn (setq match (buffer-substring (match-beginning 2)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1158 (match-end 2)))
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1159 (if (or (null pascal-pred)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1160 (funcall pascal-pred match))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1161 (setq pascal-all (cons match pascal-all)))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1162 (goto-char (match-beginning 0)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1163
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1164 (defun pascal-get-completion-decl ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1165 ;; Macro for searching through current declaration (var, type or const)
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
1166 ;; for matches of `str' and adding the occurrence to `all'
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1167 (let ((end (save-excursion (pascal-declaration-end)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1168 (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1169 match)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1170 ;; Traverse lines
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1171 (while (< (point) end)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1172 (if (re-search-forward "[:=]" (pascal-get-end-of-line) t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1173 ;; Traverse current line
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1174 (while (and (re-search-backward
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1175 (concat "\\((\\|\\<\\(var\\|type\\|const\\)\\>\\)\\|"
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1176 pascal-symbol-re)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1177 (pascal-get-beg-of-line) t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1178 (not (match-end 1)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1179 (setq match (buffer-substring (match-beginning 0) (match-end 0)))
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1180 (if (string-match (concat "\\<" pascal-str) match)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1181 (if (or (null pascal-pred)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1182 (funcall pascal-pred match))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1183 (setq pascal-all (cons match pascal-all))))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1184 (if (re-search-forward "\\<record\\>" (pascal-get-end-of-line) t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1185 (pascal-declaration-end)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1186 (forward-line 1)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1187
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1188 (defun pascal-type-completion ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1189 "Calculate all possible completions for types."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1190 (let ((start (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1191 goon)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1192 ;; Search for all reachable type declarations
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1193 (while (or (pascal-beg-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1194 (setq goon (not goon)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1195 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1196 (if (and (< start (prog1 (save-excursion (pascal-end-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1197 (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1198 (forward-char 1)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1199 (re-search-forward
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1200 "\\<type\\>\\|\\<\\(begin\\|function\\|procedure\\)\\>"
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1201 start t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1202 (not (match-end 1)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1203 ;; Check current type declaration
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1204 (pascal-get-completion-decl))))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1205
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1206 (defun pascal-var-completion ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1207 "Calculate all possible completions for variables (or constants)."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1208 (let ((start (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1209 goon twice)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1210 ;; Search for all reachable var declarations
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1211 (while (or (pascal-beg-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1212 (setq goon (not goon)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1213 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1214 (if (> start (prog1 (save-excursion (pascal-end-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1215 (point))))
14000
36dc9ede3562 (pascal-auto-newline, pascal-mode, electric-pascal-hash):
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
1216 () ; Declarations not reachable
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1217 (if (search-forward "(" (pascal-get-end-of-line) t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1218 ;; Check parameterlist
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1219 (pascal-get-completion-decl))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1220 (setq twice 2)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1221 (while (>= (setq twice (1- twice)) 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1222 (cond ((and (re-search-forward
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1223 (concat "\\<\\(var\\|const\\)\\>\\|"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1224 "\\<\\(begin\\|function\\|procedure\\)\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1225 start t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1226 (not (match-end 2)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1227 ;; Check var/const declarations
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1228 (pascal-get-completion-decl))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1229 ((match-end 2)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1230 (setq twice 0)))))))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1231
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1232
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1233 (defun pascal-keyword-completion (keyword-list)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1234 "Give list of all possible completions of keywords in KEYWORD-LIST."
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1235 (mapcar '(lambda (s)
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1236 (if (string-match (concat "\\<" pascal-str) s)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1237 (if (or (null pascal-pred)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1238 (funcall pascal-pred s))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1239 (setq pascal-all (cons s pascal-all)))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1240 keyword-list))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1241
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1242 ;; Function passed to completing-read, try-completion or
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1243 ;; all-completions to get completion on STR. If predicate is non-nil,
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1244 ;; it must be a function to be called for every match to check if this
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1245 ;; should really be a match. If flag is t, the function returns a list
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1246 ;; of all possible completions. If it is nil it returns a string, the
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1247 ;; longest possible completion, or t if STR is an exact match. If flag
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1248 ;; is 'lambda, the function returns t if STR is an exact match, nil
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1249 ;; otherwise.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1250
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1251 (defun pascal-completion (pascal-str pascal-pred pascal-flag)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 (save-excursion
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1253 (let ((pascal-all nil))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1254 ;; Set buffer to use for searching labels. This should be set
14000
36dc9ede3562 (pascal-auto-newline, pascal-mode, electric-pascal-hash):
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
1255 ;; within functions which use pascal-completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1256 (set-buffer pascal-buffer-to-use)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1257
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1258 ;; Determine what should be completed
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1259 (let ((state (car (pascal-calculate-indent))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1260 (cond (;--Within a declaration or parameterlist
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1261 (or (eq state 'declaration) (eq state 'paramlist)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1262 (and (eq state 'defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1263 (save-excursion
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1264 (re-search-backward ")[ \t]*:"
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1265 (pascal-get-beg-of-line) t))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1266 (if (or (eq state 'paramlist) (eq state 'defun))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1267 (pascal-beg-of-defun))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1268 (pascal-type-completion)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1269 (pascal-keyword-completion pascal-type-keywords))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1270 (;--Starting a new statement
8689
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1271 (and (not (eq state 'contexp))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1272 (save-excursion
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1273 (skip-chars-backward "a-zA-Z0-9_.")
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1274 (backward-sexp 1)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1275 (or (looking-at pascal-nosemi-re)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1276 (progn
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1277 (forward-sexp 1)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1278 (looking-at "\\s *\\(;\\|:[^=]\\)")))))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1279 (save-excursion (pascal-var-completion))
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1280 (pascal-func-completion 'procedure)
499bf32bfd9b (pascal-auto-lineup): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 6942
diff changeset
1281 (pascal-keyword-completion pascal-start-keywords))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1282 (t;--Anywhere else
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1283 (save-excursion (pascal-var-completion))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1284 (pascal-func-completion 'function)
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
1285 (pascal-keyword-completion pascal-separator-keywords))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1286
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1287 ;; Now we have built a list of all matches. Give response to caller
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1288 (pascal-completion-response))))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1290 (defun pascal-completion-response ()
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1291 (cond ((or (equal pascal-flag 'lambda) (null pascal-flag))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1292 ;; This was not called by all-completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1293 (if (null pascal-all)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1294 ;; Return nil if there was no matching label
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1295 nil
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1296 ;; Get longest string common in the labels
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1297 (let* ((elm (cdr pascal-all))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1298 (match (car pascal-all))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1299 (min (length match))
19148
7c41b30f50ce (pascal-mode-syntax-table): _ is now a symbol constituent.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
1300 tmp)
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1301 (if (string= match pascal-str)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1302 ;; Return t if first match was an exact match
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1303 (setq match t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1304 (while (not (null elm))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1305 ;; Find longest common string
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1306 (if (< (setq tmp (pascal-string-diff match (car elm))) min)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1307 (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1308 (setq min tmp)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1309 (setq match (substring match 0 min))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1310 ;; Terminate with match=t if this is an exact match
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1311 (if (string= (car elm) pascal-str)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1312 (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1313 (setq match t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1314 (setq elm nil))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1315 (setq elm (cdr elm)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1316 ;; If this is a test just for exact match, return nil ot t
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1317 (if (and (equal pascal-flag 'lambda) (not (equal match 't)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1318 nil
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1319 match))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1320 ;; If flag is t, this was called by all-completions. Return
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1321 ;; list of all possible completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1322 (pascal-flag
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1323 pascal-all)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1324
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1325 (defvar pascal-last-word-numb 0)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1326 (defvar pascal-last-word-shown nil)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1327 (defvar pascal-last-completions nil)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1328
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1329 (defun pascal-complete-word ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1330 "Complete word at current point.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1331 \(See also `pascal-toggle-completions', `pascal-type-keywords',
6316
1032840397be (pascal-indent-case): Handle comma separated list.
Richard M. Stallman <rms@gnu.org>
parents: 6153
diff changeset
1332 `pascal-start-keywords' and `pascal-separator-keywords'.)"
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1333 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1334 (let* ((b (save-excursion (skip-chars-backward "a-zA-Z0-9_") (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1335 (e (save-excursion (skip-chars-forward "a-zA-Z0-9_") (point)))
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1336 (pascal-str (buffer-substring b e))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1337 ;; The following variable is used in pascal-completion
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1338 (pascal-buffer-to-use (current-buffer))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1339 (allcomp (if (and pascal-toggle-completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1340 (string= pascal-last-word-shown pascal-str))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1341 pascal-last-completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1342 (all-completions pascal-str 'pascal-completion)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1343 (match (if pascal-toggle-completions
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1344 "" (try-completion
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1345 pascal-str (mapcar '(lambda (elm)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1346 (cons elm 0)) allcomp)))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1347 ;; Delete old string
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1348 (delete-region b e)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1349
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1350 ;; Toggle-completions inserts whole labels
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1351 (if pascal-toggle-completions
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 (progn
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1353 ;; Update entry number in list
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1354 (setq pascal-last-completions allcomp
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1355 pascal-last-word-numb
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1356 (if (>= pascal-last-word-numb (1- (length allcomp)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1357 0
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1358 (1+ pascal-last-word-numb)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1359 (setq pascal-last-word-shown (elt allcomp pascal-last-word-numb))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1360 ;; Display next match or same string if no match was found
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1361 (if (not (null allcomp))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1362 (insert "" pascal-last-word-shown)
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1363 (insert "" pascal-str)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1364 (message "(No match)")))
14000
36dc9ede3562 (pascal-auto-newline, pascal-mode, electric-pascal-hash):
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
1365 ;; The other form of completion does not necessarily do that.
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1366
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1367 ;; Insert match if found, or the original string if no match
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1368 (if (or (null match) (equal match 't))
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1369 (progn (insert "" pascal-str)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1370 (message "(No match)"))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1371 (insert "" match))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1372 ;; Give message about current status of completion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1373 (cond ((equal match 't)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1374 (if (not (null (cdr allcomp)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1375 (message "(Complete but not unique)")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1376 (message "(Sole completion)")))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1377 ;; Display buffer if the current completion didn't help
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1378 ;; on completing the label.
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1379 ((and (not (null (cdr allcomp))) (= (length pascal-str)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1380 (length match)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1381 (with-output-to-temp-buffer "*Completions*"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1382 (display-completion-list allcomp))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1383 ;; Wait for a keypress. Then delete *Completion* window
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1384 (momentary-string-display "" (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1385 (delete-window (get-buffer-window (get-buffer "*Completions*")))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1386 )))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1387
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1388 (defun pascal-show-completions ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1389 "Show all possible completions at current point."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1390 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1391 (let* ((b (save-excursion (skip-chars-backward "a-zA-Z0-9_") (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1392 (e (save-excursion (skip-chars-forward "a-zA-Z0-9_") (point)))
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1393 (pascal-str (buffer-substring b e))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1394 ;; The following variable is used in pascal-completion
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1395 (pascal-buffer-to-use (current-buffer))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1396 (allcomp (if (and pascal-toggle-completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1397 (string= pascal-last-word-shown pascal-str))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1398 pascal-last-completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1399 (all-completions pascal-str 'pascal-completion))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1400 ;; Show possible completions in a temporary buffer.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1401 (with-output-to-temp-buffer "*Completions*"
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1402 (display-completion-list allcomp))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1403 ;; Wait for a keypress. Then delete *Completion* window
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1404 (momentary-string-display "" (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1405 (delete-window (get-buffer-window (get-buffer "*Completions*")))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1406
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1407
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1408 (defun pascal-get-default-symbol ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1409 "Return symbol around current point as a string."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1410 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1411 (buffer-substring (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1412 (skip-chars-backward " \t")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1413 (skip-chars-backward "a-zA-Z0-9_")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1414 (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1415 (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1416 (skip-chars-forward "a-zA-Z0-9_")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1417 (point)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1418
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1419 (defun pascal-build-defun-re (str &optional arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1420 "Return function/procedure starting with STR as regular expression.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1421 With optional second arg non-nil, STR is the complete name of the instruction."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1422 (if arg
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1423 (concat "^\\(function\\|procedure\\)[ \t]+\\(" str "\\)\\>")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1424 (concat "^\\(function\\|procedure\\)[ \t]+\\(" str "[a-zA-Z0-9_]*\\)\\>")))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1425
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1426 ;; Function passed to completing-read, try-completion or
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1427 ;; all-completions to get completion on any function name. If
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1428 ;; predicate is non-nil, it must be a function to be called for every
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1429 ;; match to check if this should really be a match. If flag is t, the
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1430 ;; function returns a list of all possible completions. If it is nil
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1431 ;; it returns a string, the longest possible completion, or t if STR
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1432 ;; is an exact match. If flag is 'lambda, the function returns t if
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1433 ;; STR is an exact match, nil otherwise.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1434
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1435 (defun pascal-comp-defun (pascal-str pascal-pred pascal-flag)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1436 (save-excursion
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1437 (let ((pascal-all nil)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1438 match)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1439
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1440 ;; Set buffer to use for searching labels. This should be set
14000
36dc9ede3562 (pascal-auto-newline, pascal-mode, electric-pascal-hash):
Karl Heuer <kwzh@gnu.org>
parents: 13337
diff changeset
1441 ;; within functions which use pascal-completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1442 (set-buffer pascal-buffer-to-use)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1443
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1444 (let ((pascal-str pascal-str))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1445 ;; Build regular expression for functions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1446 (if (string= pascal-str "")
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1447 (setq pascal-str (pascal-build-defun-re "[a-zA-Z_]"))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1448 (setq pascal-str (pascal-build-defun-re pascal-str)))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1449 (goto-char (point-min))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1450
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1451 ;; Build a list of all possible completions
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1452 (while (re-search-forward pascal-str nil t)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1453 (setq match (buffer-substring (match-beginning 2) (match-end 2)))
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1454 (if (or (null pascal-pred)
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1455 (funcall pascal-pred match))
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1456 (setq pascal-all (cons match pascal-all)))))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1457
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1458 ;; Now we have built a list of all matches. Give response to caller
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1459 (pascal-completion-response))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1460
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1461 (defun pascal-goto-defun ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1462 "Move to specified Pascal function/procedure.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1463 The default is a name found in the buffer around point."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1464 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1465 (let* ((default (pascal-get-default-symbol))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1466 ;; The following variable is used in pascal-comp-function
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1467 (pascal-buffer-to-use (current-buffer))
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1468 (default (if (pascal-comp-defun default nil 'lambda)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1469 default ""))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1470 (label (if (not (string= default ""))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1471 ;; Do completion with default
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1472 (completing-read (concat "Label: (default " default ") ")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1473 'pascal-comp-defun nil t "")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1474 ;; There is no default value. Complete without it
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1475 (completing-read "Label: "
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1476 'pascal-comp-defun nil t ""))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1477 ;; If there was no response on prompt, use default value
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1478 (if (string= label "")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1479 (setq label default))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1480 ;; Goto right place in buffer if label is not an empty string
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1481 (or (string= label "")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1482 (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1483 (goto-char (point-min))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1484 (re-search-forward (pascal-build-defun-re label t))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1485 (beginning-of-line)))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1486
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1487
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1489 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1490 ;;; Pascal-outline-mode
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1491 ;;;
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1492 (defvar pascal-outline-map nil "Keymap used in Pascal Outline mode.")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1493
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1494 (if pascal-outline-map
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1495 nil
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1496 (if (boundp 'set-keymap-name)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1497 (set-keymap-name pascal-outline-map 'pascal-outline-map))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1498 (if (not (boundp 'set-keymap-parent))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1499 (setq pascal-outline-map (copy-keymap pascal-mode-map))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1500 (setq pascal-outline-map (make-sparse-keymap))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1501 (set-keymap-parent pascal-outline-map pascal-mode-map))
10446
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
1502 (define-key pascal-outline-map "\M-\C-a" 'pascal-outline-prev-defun)
034609a036b1 (pascal-mode-map, pascal-outline-map):
Richard M. Stallman <rms@gnu.org>
parents: 9479
diff changeset
1503 (define-key pascal-outline-map "\M-\C-e" 'pascal-outline-next-defun)
6942
90305d5fe5aa (pascal-outline-map): Move pascal-outline-goto-defun to C-c C-d.
Richard M. Stallman <rms@gnu.org>
parents: 6316
diff changeset
1504 (define-key pascal-outline-map "\C-c\C-d" 'pascal-outline-goto-defun)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1505 (define-key pascal-outline-map "\C-c\C-s" 'pascal-show-all)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1506 (define-key pascal-outline-map "\C-c\C-h" 'pascal-hide-other-defuns))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1507
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1508 (defvar pascal-outline-mode nil "Non-nil while using Pascal Outline mode.")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1509 (make-variable-buffer-local 'pascal-outline-mode)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1510 (set-default 'pascal-outline-mode nil)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1511 (if (not (assoc 'pascal-outline-mode minor-mode-alist))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1512 (setq minor-mode-alist (append minor-mode-alist
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1513 (list '(pascal-outline-mode " Outl")))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1514
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1515 (defun pascal-outline (&optional arg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1516 "Outline-line minor mode for Pascal mode.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1517 When in Pascal Outline mode, portions
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1518 of the text being edited may be made invisible. \\<pascal-outline-map>
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1519
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1520 Pascal Outline mode provides some additional commands.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1521
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1522 \\[pascal-outline-prev-defun]\
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1523 \t- Move to previous function/procedure, hiding everything else.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1524 \\[pascal-outline-next-defun]\
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1525 \t- Move to next function/procedure, hiding everything else.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1526 \\[pascal-outline-goto-defun]\
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1527 \t- Goto function/procedure prompted for in minibuffer,
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1528 \t hide all other functions.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1529 \\[pascal-show-all]\t- Show the whole buffer.
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1530 \\[pascal-hide-other-defuns]\
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1531 \t- Hide everything but the current function (function under the cursor).
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1532 \\[pascal-outline]\t- Leave pascal-outline-mode."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1533 (interactive "P")
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1534 (setq pascal-outline-mode
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1535 (if (null arg) (not pascal-outline-mode) t))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1536 (if (boundp 'redraw-mode-line)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1537 (redraw-mode-line))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1538 (if pascal-outline-mode
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1539 (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1540 (setq selective-display t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1541 (use-local-map pascal-outline-map))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1542 (progn
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1543 (setq selective-display nil)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1544 (pascal-show-all)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1545 (use-local-map pascal-mode-map))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1546
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1547 (defun pascal-outline-change (b e pascal-flag)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1548 (let ((modp (buffer-modified-p)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1549 (unwind-protect
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47263
diff changeset
1550 (subst-char-in-region b e (if (= pascal-flag ?\n)
10534
38b5efae433a (pascal-*-completion, pascal-comp-defun)
Richard M. Stallman <rms@gnu.org>
parents: 10446
diff changeset
1551 ?\^M ?\n) pascal-flag)
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1552 (set-buffer-modified-p modp))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1553
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1554 (defun pascal-show-all ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1555 "Show all of the text in the buffer."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1556 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1557 (pascal-outline-change (point-min) (point-max) ?\n))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1558
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1559 (defun pascal-hide-other-defuns ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1560 "Show only the current defun."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1561 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1562 (save-excursion
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1563 (let ((beg (progn (if (not (looking-at "\\(function\\|procedure\\)\\>"))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1564 (pascal-beg-of-defun))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1565 (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1566 (end (progn (pascal-end-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1567 (backward-sexp 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1568 (search-forward "\n\\|\^M" nil t)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1569 (point)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1570 (opoint (point-min)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1571 (goto-char (point-min))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1572
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1573 ;; Hide all functions before current function
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1574 (while (re-search-forward "^\\(function\\|procedure\\)\\>" beg 'move)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1575 (pascal-outline-change opoint (1- (match-beginning 0)) ?\^M)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1576 (setq opoint (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1577 ;; Functions may be nested
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1578 (if (> (progn (pascal-end-of-defun) (point)) beg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1579 (goto-char opoint)))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1580 (if (> beg opoint)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1581 (pascal-outline-change opoint (1- beg) ?\^M))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1582
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1583 ;; Show current function
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1584 (pascal-outline-change beg end ?\n)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1585 ;; Hide nested functions
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1586 (forward-char 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1587 (while (re-search-forward "^\\(function\\|procedure\\)\\>" end 'move)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1588 (setq opoint (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1589 (pascal-end-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1590 (pascal-outline-change opoint (point) ?\^M))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1591
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1592 (goto-char end)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1593 (setq opoint end)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1594
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1595 ;; Hide all function after current function
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1596 (while (re-search-forward "^\\(function\\|procedure\\)\\>" nil 'move)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1597 (pascal-outline-change opoint (1- (match-beginning 0)) ?\^M)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1598 (setq opoint (point))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1599 (pascal-end-of-defun))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1600 (pascal-outline-change opoint (point-max) ?\^M)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1601
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1602 ;; Hide main program
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1603 (if (< (progn (forward-line -1) (point)) end)
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 (progn
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1605 (goto-char beg)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1606 (pascal-end-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1607 (backward-sexp 1)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1608 (pascal-outline-change (point) (point-max) ?\^M))))))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1609
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1610 (defun pascal-outline-next-defun ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1611 "Move to next function/procedure, hiding all others."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1612 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1613 (pascal-end-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1614 (pascal-hide-other-defuns))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1616 (defun pascal-outline-prev-defun ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1617 "Move to previous function/procedure, hiding all others."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1618 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1619 (pascal-beg-of-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1620 (pascal-hide-other-defuns))
4934
a8b355b89859 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1622 (defun pascal-outline-goto-defun ()
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1623 "Move to specified function/procedure, hiding all others."
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1624 (interactive)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1625 (pascal-goto-defun)
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1626 (pascal-hide-other-defuns))
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1627
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 18041
diff changeset
1628 (provide 'pascal)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 18041
diff changeset
1629
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49598
diff changeset
1630 ;;; arch-tag: 04535136-fd93-40b4-a505-c9bebdc051f5
5723
f5d12c7f056e Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 4934
diff changeset
1631 ;;; pascal.el ends here