annotate lisp/progmodes/meta-mode.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 1d1d5d9bd884
children 56b71cddc9c5 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 20953
diff changeset
1 ;;; meta-mode.el --- major mode for editing Metafont or MetaPost sources
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106236
diff changeset
3 ;; Copyright (C) 1997, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
64699
629afbe74e61 Update copyright for release of 22.1 for progmodes directory.
Nick Roberts <nickrob@snap.net.nz>
parents: 64085
diff changeset
4 ;; Free Software Foundation, Inc.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Author: Ulrik Vieth <vieth@thphy.uni-duesseldorf.de>
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Version: 1.0
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Keywords: Metafont, MetaPost, tex, languages
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
18924
f4b6329afef0 Update copyright notice and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 18388
diff changeset
10 ;; This file is part of GNU Emacs.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
15 ;; (at your option) any later version.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
18924
f4b6329afef0 Update copyright notice and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 18388
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; Description:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; This Emacs Lisp package provides a major mode for editing Metafont
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; or MetaPost sources. It includes all the necessary code to set up
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; a major mode including an approriate syntax table, keymap, and a
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; mode-specific pull-down menu. It also provides a sophisticated set
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; of font-lock patterns, a fancy indentation function adapted from
56756
49550f69cc8d Update AUCTeX
David Kastrup <dak@gnu.org>
parents: 52401
diff changeset
34 ;; AUCTeX's latex.el, and some basic mode-specific editing functions
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; such as functions to move to the beginning or end of the enclosing
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; environment, or to mark, re-indent, or comment-out environments.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; On the other hand, it doesn't yet provide any functionality for
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; running Metafont or MetaPost in a shell buffer form within Emacs,
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; but such functionality might be added later, either as part of this
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; package or as a separate Emacs Lisp package.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; Installation:
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
43 ;;
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; An interface to running Metafont or MetaPost as a shell process
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; from within Emacs is currently under development as a separate
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; Emacs Lisp package (meta-buf.el). In order to have that package
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; loaded automatically when first entering Metafont or MetaPost mode,
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; you might use the load-hook provided in this package by adding
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; these lines to your startup file:
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
50 ;;
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
51 ;; (add-hook 'meta-mode-load-hook
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
52 ;; (lambda () (require 'meta-buf)))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; The add-on package loaded this way may in turn make use of the
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; mode-hooks provided in this package to activate additional features
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; when entering Metafont or MetaPost mode.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; Font Lock Support:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; If you are using global-font-lock-mode (introduced in Emacs 19.31),
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; fontification in Metafont and/or MetaPost mode will be activated
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; automatically. To speed up fontification for the rather complex
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; patterns used in these modes, it may be a good idea to activate
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; lazy-lock as a font-lock-support-mode (introduced in Emacs 19.32)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; by adding these lines to your startup file:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; (global-font-lock-mode t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; (setq font-lock-support-mode 'lazy-lock-mode)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; If you are using an older version of Emacs, which doesn't provide
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; global-font-lock-mode or font-lock-support-mode, you can also
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; activate fontification in Metafont and/or MetaPost mode by adding
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; the following lines to your startup file:
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
74 ;;
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; (add-hook 'meta-common-mode-hook 'turn-on-font-lock)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; (add-hook 'meta-common-mode-hook 'turn-on-lazy-lock)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; Customization:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; Following the usual Emacs Lisp coding conventions, the major modes
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; defined in this package provide several hook variables to allow for
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; local customization when entering the modes. In particular, there
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; is a `meta-common-mode-hook' which applies to both modes as well as
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; `metafont-mode-hook' and `metapost-mode-hook' which apply to the
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; individual modes. In addition, there are several variables and
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; regexps controlling e.g. the behavior of the indentation function,
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; which may be customized via `edit-options'. Please refer to the
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; docstrings in the code below for details.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; Availability:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; This package is currently available via my "TeX Software" WWW page:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;; http://www.thphy.uni-duesseldorf.de/~vieth/subjects/tex/software.html
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;; As of this version 1.0, this package will be uploaded to CTAN
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; archives, where it shall find a permanent home, presumably in
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;; tex-archive/support/emacs-modes. It will also be submitted for
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; integration into the GNU Emacs distribution at that time.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;; History:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; v 0.0 -- 1997/02/01 UV Started writing meta-mode.el.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; v 0.1 -- 1997/02/02 UV Added preliminary set of font-lock patterns.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; v 0.2 -- 1997/02/03 UV Improved and debugged font-lock patterns.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;; Added indent-line-function for TAB.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; v 0.3 -- 1997/02/17 UV Improved font-lock patterns and syntax table.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; Improved and debbuged indentation function.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; v 0.4 -- 1997/02/18 UV Added functions to indent regions for M-C-q,
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;; also added a preliminary mode-specific menu.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
111 ;; v 0.5 -- 1997/02/19 UV Added functions to skip to next or previous
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; defun and to re-indent or comment-out defuns.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;; v 0.6 -- 1997/02/20 UV More debugging, testing and clean-up.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; v 0.7 -- 1997/02/22 UV Use easymenu to define mode-specific menu.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; v 0.8 -- 1997/02/24 UV Added completion function for M-TAB.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;; v 0.9 -- 1997/03/08 UV Added fill-paragraph function for comments.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;; Also fixed a few remaining font-lock problems.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; Added meta-mode-load-hook to load meta-buf.el.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; v 1.0 -- 1997/04/07 UV Cleanup for official public release.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; Historical Footnote:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; This package was begun on February 1, 1997, exactly 20 years after
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; the genesis of TeX took place according to Don Knuth's own account
84654
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
125 ;; (cf. ``The Errors of TeX'', reprinted in ``Literate Programming'',
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; Chapter 10, p. 249). What better date could there be to choose?
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;;; Code:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (require 'easymenu)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
134 (defgroup meta-font nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
135 "Major mode for editing Metafont or MetaPost sources."
66963
a11fdee52c05 Add :link (custom-group-link font-lock-faces) to defgroup.
Juri Linkov <juri@jurta.org>
parents: 66114
diff changeset
136 :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces)
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
137 :group 'languages)
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
138
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;;; Fontification.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (defvar meta-font-lock-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (let ((input-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 "\\(input\\|generate\\)")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (begin-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (concat "\\(begin\\(char\\|fig\\|graph\\|logochar\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 "\\cmchar\\|dcchar\\|ecchar\\)"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (end-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 "\\(end\\(char\\|fig\\|graph\\)\\)")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (macro-keywords-1
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 "\\(def\\|let\\|mode_def\\|vardef\\)")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (macro-keywords-2
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 "\\(primarydef\\|secondarydef\\|tertiarydef\\)")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;(make-regexp
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ; '("expr" "suffix" "text" "primary" "secondary" "tertiary") t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 (args-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (concat "\\(expr\\|primary\\|s\\(econdary\\|uffix\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 "te\\(rtiary\\|xt\\)\\)"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 ;(make-regexp
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ; '("boolean" "color" "numeric" "pair" "path" "pen" "picture"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ; "string" "transform" "newinternal") t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 (type-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (concat "\\(boolean\\|color\\|n\\(ewinternal\\|umeric\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 "p\\(a\\(ir\\|th\\)\\|en\\|icture\\)\\|string\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 "transform\\)"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;(make-regexp
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ; '("for" "forever" "forsuffixes" "endfor"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ; "step" "until" "upto" "downto" "thru" "within"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ; "iff" "if" "elseif" "else" "fi" "exitif" "exitunless"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ; "let" "def" "vardef" "enddef" "mode_def"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ; "true" "false" "known" "unknown" "and" "or" "not"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ; "save" "interim" "inner" "outer" "relax"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ; "begingroup" "endgroup" "expandafter" "scantokens"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ; "generate" "input" "endinput" "end" "bye"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ; "message" "errmessage" "errhelp" "special" "numspecial"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 ; "readstring" "readfrom" "write") t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (syntactic-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (concat "\\(and\\|b\\(egingroup\\|ye\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 "d\\(ef\\|ownto\\)\\|e\\(lse\\(\\|if\\)"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 "\\|nd\\(\\|def\\|for\\|group\\|input\\)"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 "\\|rr\\(help\\|message\\)"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 "\\|x\\(it\\(if\\|unless\\)\\|pandafter\\)\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 "f\\(alse\\|i\\|or\\(\\|ever\\|suffixes\\)\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 "generate\\|i\\(ff?\\|n\\(ner\\|put\\|terim\\)\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 "known\\|let\\|m\\(essage\\|ode_def\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 "n\\(ot\\|umspecial\\)\\|o\\(r\\|uter\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 "re\\(ad\\(from\\|string\\)\\|lax\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 "s\\(ave\\|cantokens\\|pecial\\|tep\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 "t\\(hru\\|rue\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 "u\\(n\\(known\\|til\\)\\|pto\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 "vardef\\|w\\(ithin\\|rite\\)\\)"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 )
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 (list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;; embedded TeX code in btex ... etex
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (cons (concat "\\(btex\\|verbatimtex\\)"
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
195 "[ \t\f]+\\(.*\\)[ \t\f]+"
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 "\\(etex\\)")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 '((1 font-lock-keyword-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (2 font-lock-string-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (3 font-lock-keyword-face)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 ;; unary macro definitions: def, vardef, let
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (cons (concat "\\<" macro-keywords-1 "\\>"
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
202 "[ \t\f]+\\(\\sw+\\|\\s_+\\|\\s.+\\)")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 '((1 font-lock-keyword-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (2 font-lock-function-name-face)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 ;; binary macro defintions: <leveldef> x operator y
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (cons (concat "\\<" macro-keywords-2 "\\>"
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
207 "[ \t\f]+\\(\\sw+\\)"
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
208 "[ \t\f]*\\(\\sw+\\|\\s.+\\)"
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
209 "[ \t\f]*\\(\\sw+\\)")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 '((1 font-lock-keyword-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (2 font-lock-variable-name-face nil t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (3 font-lock-function-name-face nil t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (4 font-lock-variable-name-face nil t)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ;; variable declarations: numeric, pair, color, ...
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (cons (concat "\\<" type-keywords "\\>"
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
216 "\\([ \t\f]+\\(\\sw+\\)\\)*")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 '((1 font-lock-type-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 (font-lock-match-meta-declaration-item-and-skip-to-next
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (goto-char (match-end 1)) nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (1 font-lock-variable-name-face nil t))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ;; argument declarations: expr, suffix, text, ...
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (cons (concat "\\<" args-keywords "\\>"
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
223 "\\([ \t\f]+\\(\\sw+\\|\\s_+\\)\\)*")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 '((1 font-lock-type-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (font-lock-match-meta-declaration-item-and-skip-to-next
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (goto-char (match-end 1)) nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (1 font-lock-variable-name-face nil t))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 ;; special case of arguments: expr x of y
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
229 (cons (concat "\\(expr\\)[ \t\f]+\\(\\sw+\\)"
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
230 "[ \t\f]+\\(of\\)[ \t\f]+\\(\\sw+\\)")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 '((1 font-lock-type-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (2 font-lock-variable-name-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (3 font-lock-keyword-face nil t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (4 font-lock-variable-name-face nil t)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 ;; syntactic keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (cons (concat "\\<" syntactic-keywords "\\>")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 'font-lock-keyword-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;; beginchar, beginfig
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (cons (concat "\\<" begin-keywords "\\>")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 'font-lock-keyword-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 ;; endchar, endfig
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (cons (concat "\\<" end-keywords "\\>")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 'font-lock-keyword-face)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 ;; input, generate
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (cons (concat "\\<" input-keywords "\\>"
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
246 "[ \t\f]+\\(\\sw+\\)")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 '((1 font-lock-keyword-face)
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20781
diff changeset
248 (2 font-lock-constant-face)))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 ;; embedded Metafont/MetaPost code in comments
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
250 (cons "|\\([^|]+\\)|"
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20781
diff changeset
251 '(1 font-lock-constant-face t))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 ))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 "Default expressions to highlight in Metafont or MetaPost mode.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (defun font-lock-match-meta-declaration-item-and-skip-to-next (limit)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 ;; Match and move over Metafont/MetaPost declaration item after point.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 ;; The expected syntax of an item is either "word" or "symbol",
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 ;; possibly ending with optional whitespace. Everything following
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 ;; the item (but belonging to it) is expected to by skipable by
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ;; `forward-sexp'. The list of items is expected to be separated
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 ;; by commas and terminated by semicolons or equals signs.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 ;;
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
265 (if (looking-at "[ \t\f]*\\(\\sw+\\|\\s_+\\)")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (save-match-data
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 (condition-case nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 (save-restriction
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 ;; Restrict to end of line, currently guaranteed to be LIMIT.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 (narrow-to-region (point-min) limit)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 (goto-char (match-end 1))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 ;; Move over any item value, etc., to the next item.
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
273 (while (not (looking-at "[ \t\f]*\\(\\(,\\)\\|;\\|=\\|$\\)"))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (goto-char (or (scan-sexps (point) 1) (point-max))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (goto-char (match-end 2)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 (error t)))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 ;;; Completion.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 ;; The data used to prepare the following lists of primitives and
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 ;; standard macros available in Metafont or MetaPost was extracted
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 ;; from the original sources like this:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;; grep '^primitive' texk-7.0/web2c/{mf,mp}.web |\
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 ;; sed 's/primitive(\("[a-zA-Z]*"\).*/\1/' > {mf,mp}_prim.list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 ;;
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
289 ;; grep '\(let\|def\|vardef\|primarydef\|secondarydef\|tertiarydef\)'
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 ;; texmf/meta{font,post}/plain.{mf,mp} > {mf,mp}_plain.list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
292 (defconst meta-common-primitives-list
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 '("ASCII" "addto" "also" "and" "angle" "atleast" "batchmode"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 "begingroup" "boolean" "boundarychar" "char" "charcode" "chardp"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 "charexists" "charext" "charht" "charic" "charlist" "charwd"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 "contour" "controls" "cosd" "curl" "cycle" "day" "decimal" "def"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 "delimiters" "designsize" "directiontime" "doublepath" "dump" "else"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 "elseif" "end" "enddef" "endfor" "endgroup" "endinput" "errhelp"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 "errmessage" "errorstopmode" "everyjob" "exitif" "expandafter"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 "expr" "extensible" "false" "fi" "floor" "fontdimen" "fontmaking"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 "for" "forever" "forsuffixes" "headerbyte" "hex" "if" "inner"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 "input" "interim" "intersectiontimes" "jobname" "kern" "known"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 "length" "let" "ligtable" "makepath" "makepen" "message" "mexp"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 "mlog" "month" "newinternal" "nonstopmode" "normaldeviate" "not"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 "nullpen" "nullpicture" "numeric" "oct" "odd" "of" "or" "outer"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 "pair" "path" "pausing" "pen" "pencircle" "penoffset" "picture"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 "point" "postcontrol" "precontrol" "primary" "primarydef" "quote"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 "randomseed" "readstring" "reverse" "rotated" "save" "scaled"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 "scantokens" "scrollmode" "secondary" "secondarydef" "shifted"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 "shipout" "show" "showdependencies" "showstats" "showstopping"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 "showtoken" "showvariable" "sind" "skipto" "slanted" "special"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 "sqrt" "step" "str" "string" "subpath" "substring" "suffix"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 "tension" "tertiary" "tertiarydef" "text" "time" "to"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 "tracingcapsules" "tracingchoices" "tracingcommands"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 "tracingequations" "tracingmacros" "tracingonline" "tracingoutput"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 "tracingrestores" "tracingspecs" "tracingstats" "tracingtitles"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 "transform" "transformed" "true" "turningnumber" "uniformdeviate"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 "unknown" "until" "vardef" "warningcheck" "withpen" "xpart"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 "xscaled" "xxpart" "xypart" "year" "ypart" "yscaled" "yxpart"
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
320 "yypart" "zscaled")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 "List of primitives common to Metafont and MetaPost.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
323 (defconst metafont-primitives-list
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 '("at" "autorounding" "chardx" "chardy" "cull" "display"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 "dropping" "fillin" "from" "granularity" "hppp" "inwindow"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 "keeping" "numspecial" "openwindow" "proofing" "smoothing"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 "totalweight" "tracingedges" "tracingpens" "turningcheck" "vppp"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 "withweight" "xoffset" "yoffset")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 "List of primitives only defined in Metafont.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
331 (defconst metapost-primitives-list
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 '("arclength" "arctime" "bluepart" "bounded" "btex" "clip"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 "clipped" "color" "dashed" "dashpart" "etex" "filled" "fontpart"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 "fontsize" "greenpart" "infont" "linecap" "linejoin" "llcorner"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 "lrcorner" "miterlimit" "mpxbreak" "pathpart" "penpart"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 "prologues" "readfrom" "redpart" "setbounds" "stroked" "textpart"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 "textual" "tracinglostchars" "truecorners" "ulcorner" "urcorner"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 "verbatimtex" "withcolor" "within" "write")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 "List of primitives only defined in MetaPost.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
341 (defconst meta-common-plain-macros-list
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 '( "abs" "bot" "bye" "byte" "ceiling" "clear_pen_memory"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 "clearit" "clearpen" "clearxy" "counterclockwise" "cutdraw" "decr"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 "dir" "direction" "directionpoint" "div" "dotprod" "downto" "draw"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 "drawdot" "erase" "exitunless" "fill" "filldraw" "flex" "gobble"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 "hide" "incr" "interact" "interpath" "intersectionpoint" "inverse"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 "label" "labels" "lft" "loggingall" "magstep" "makelabel" "max"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 "min" "mod" "numtok" "penlabels" "penpos" "penstroke" "pickup"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 "range" "reflectedabout" "relax" "rotatedabout" "rotatedaround"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 "round" "rt" "savepen" "shipit" "softjoin" "solve" "stop"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 "superellipse" "takepower" "tensepath" "thru" "top" "tracingall"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 "tracingnone" "undraw" "undrawdot" "unfill" "unfilldraw"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 "unitvector" "upto" "whatever")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 "List of macros common to plain Metafont and MetaPost.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
356 (defconst metafont-plain-macros-list
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 '("beginchar" "change_width" "culldraw" "cullit" "cutoff"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 "define_blacker_pixels" "define_corrected_pixels"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 "define_good_x_pixels" "define_good_y_pixels"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 "define_horizontal_corrected_pixels" "define_pixels"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 "define_whole_blacker_pixels" "define_whole_pixels"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 "define_whole_vertical_blacker_pixels"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 "define_whole_vertical_pixels" "endchar" "fix_units"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 "font_coding_scheme" "font_extra_space" "font_identifier"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 "font_normal_shrink" "font_normal_space" "font_normal_stretch"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 "font_quad" "font_size" "font_slant" "font_x_height" "gfcorners"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 "good.bot" "good.lft" "good.rt" "good.top" "good.x" "good.y"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 "grayfont" "hround" "imagerules" "italcorr" "labelfont"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 "lowres_fix" "makebox" "makegrid" "maketicks" "mode_lowres"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 "mode_proof" "mode_setup" "mode_smoke" "nodisplays" "notransforms"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 "openit" "penrazor" "pensquare" "proofoffset" "proofrule"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 "proofrulethickness" "screenchars" "screenrule" "screenstrokes"
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
373 "showit" "slantfont" "smode" "titlefont" "vround")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 "List of macros only defined in plain Metafont.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
376 (defconst metapost-plain-macros-list
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 '("arrowhead" "bbox" "beginfig" "buildcycle" "center" "cutafter"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 "cutbefore" "dashpattern" "dotlabel" "dotlabels" "drawarrow"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 "drawdblarrow" "drawoptions" "endfig" "image" "label" "off" "on"
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
380 "thelabel")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 "List of macros only defined in plain MetaPost.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
383 (defconst metapost-graph-macros-list
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
384 '("augment" "auto.x" "auto.y" "autogrid" "begingraph" "endgraph"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
385 "format" "frame" "gdata" "gdotlabel" "gdraw" "gdrawarrow"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
386 "gdrawdblarrow" "gfill" "glabel" "grid" "itick" "otick" "plot"
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 "setcoords" "setrange")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 "List of macros only defined in MetaPost \"graph\" package.")
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
389
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
390 (defconst metapost-boxes-macros-list
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 '("boxit" "boxjoin" "bpath" "circleit" "drawboxed" "drawboxes"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 "drawunboxed" "fixpos" "fixsize" "pic" "rboxit")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 "List of macros only defined in MetaPost \"boxes\" package.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 (defvar metafont-symbol-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 (append meta-common-primitives-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 metafont-primitives-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 meta-common-plain-macros-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 metafont-plain-macros-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 "List of known symbols to complete in Metafont mode.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (defvar metapost-symbol-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (append meta-common-primitives-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 metapost-primitives-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 meta-common-plain-macros-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 metapost-plain-macros-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 metapost-graph-macros-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 metapost-boxes-macros-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 "List of known symbols to complete in MetaPost mode.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (defvar meta-symbol-list nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 "List of known symbols to complete in Metafont or MetaPost mode.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
416 (defvar meta-symbol-changed nil
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 "Flag indicating whether `meta-symbol-list' has been initialized.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 (defvar meta-complete-list nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 ; (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 ; (list "" 'ispell-complete-word))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 "List of ways to perform completion in Metafont or MetaPost mode.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 Each entry is a list with the following elements:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 1. Regexp matching the preceding text.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 2. A number indicating the subgroup in the regexp containing the text.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 3. A function returning an alist of possible completions.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 4. Text to append after a succesful completion (if any).
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 Or alternatively:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 1. Regexp matching the preceding text.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 2. Function to do the actual completion.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (defun meta-add-symbols (&rest entries)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 "Add entries to list of known symbols in Metafont or MetaPost mode."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (if meta-symbol-changed
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (setq meta-symbol-list (cons entries meta-symbol-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (setq meta-symbol-changed t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (setq meta-symbol-list (cons entries meta-symbol-list))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (defun meta-symbol-list ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 "Return value of list of known symbols in Metafont or MetaPost mode.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 If the list was changed, sort the list and remove duplicates first."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (if (not meta-symbol-changed)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (setq meta-symbol-changed nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (message "Preparing completion list...")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 ;; sort list of symbols
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 (setq meta-symbol-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (sort (mapcar 'meta-listify (apply 'append meta-symbol-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 'meta-car-string-lessp))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 ;; remove duplicates
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (let ((entry meta-symbol-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 (while (and entry (cdr entry))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 (let ((this (car entry))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (next (car (cdr entry))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 (if (not (string-equal (car this) (car next)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 (setq entry (cdr entry))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 (if (> (length next) (length this))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 (setcdr this (cdr next)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 (setcdr entry (cdr (cdr entry)))))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (message "Preparing completion list... done"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 meta-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 (defun meta-listify (a)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 ;; utility function used in `meta-add-symbols'
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (if (listp a) a (list a)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 (defun meta-car-string-lessp (a b)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 ;; utility function used in `meta-add-symbols'
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 (string-lessp (car a) (car b)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (defun meta-complete-symbol ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 "Perform completion on Metafont or MetaPost symbol preceding point."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 (interactive "*")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (let ((list meta-complete-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 entry)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 (while list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 (setq entry (car list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 list (cdr list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 (if (meta-looking-at-backward (car entry) 200)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (setq list nil)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 (if (numberp (nth 1 entry))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (let* ((sub (nth 1 entry))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 (close (nth 3 entry))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 (begin (match-beginning sub))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (end (match-end sub))
106236
4436585c0829 * progmodes/meta-mode.el (meta-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 100908
diff changeset
490 (list (funcall (nth 2 entry))))
4436585c0829 * progmodes/meta-mode.el (meta-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 100908
diff changeset
491 (completion-in-region
4436585c0829 * progmodes/meta-mode.el (meta-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 100908
diff changeset
492 begin end
4436585c0829 * progmodes/meta-mode.el (meta-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 100908
diff changeset
493 (if (zerop (length close)) list
4436585c0829 * progmodes/meta-mode.el (meta-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 100908
diff changeset
494 (apply-partially 'completion-table-with-terminator
4436585c0829 * progmodes/meta-mode.el (meta-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 100908
diff changeset
495 close list))))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (funcall (nth 1 entry)))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 (defun meta-looking-at-backward (regexp &optional limit)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 ;; utility function used in `meta-complete-symbol'
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 (let ((pos (point)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 (save-excursion
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
503 (and (re-search-backward
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 regexp (if limit (max (point-min) (- (point) limit))) t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (eq (match-end 0) pos)))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (defun meta-match-buffer (n)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 ;; utility function used in `meta-complete-symbol'
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (if (match-beginning n)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 (let ((str (buffer-substring (match-beginning n) (match-end n))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 (set-text-properties 0 (length str) nil str)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 (copy-sequence str))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 ""))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 ;;; Indentation.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
519 (defcustom meta-indent-level 2
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
520 "*Indentation of begin-end blocks in Metafont or MetaPost mode."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
521 :type 'integer
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
522 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
525 (defcustom meta-left-comment-regexp "%%+"
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
526 "*Regexp matching comments that should be placed on the left margin."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
527 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
528 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
530 (defcustom meta-right-comment-regexp nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
531 "*Regexp matching comments that should be placed to the right margin."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
532 :type '(choice regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
533 (const :tag "None" nil))
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
534 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
536 (defcustom meta-ignore-comment-regexp "%[^%]"
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
537 "*Regexp matching comments that whose indentation should not be touched."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
538 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
539 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
542 (defcustom meta-begin-environment-regexp
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (concat "\\(begin\\(char\\|fig\\|gr\\(aph\\|oup\\)\\|logochar\\)\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 "def\\|for\\(\\|ever\\|suffixes\\)\\|if\\|mode_def\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 "primarydef\\|secondarydef\\|tertiarydef\\|vardef\\)")
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
546 "*Regexp matching the beginning of environments to be indented."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
547 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
548 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
550 (defcustom meta-end-environment-regexp
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 (concat "\\(end\\(char\\|def\\|f\\(ig\\|or\\)\\|gr\\(aph\\|oup\\)\\)"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 "\\|fi\\)")
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
553 "*Regexp matching the end of environments to be indented."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
554 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
555 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
557 (defcustom meta-within-environment-regexp
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ; (concat "\\(e\\(lse\\(\\|if\\)\\|xit\\(if\\|unless\\)\\)\\)")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 (concat "\\(else\\(\\|if\\)\\)")
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
560 "*Regexp matching keywords within environments not to be indented."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
561 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
562 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (defun meta-comment-indent ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 "Return the indentation for a comment in Metafont or MetaPost mode."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 (if (and meta-left-comment-regexp
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 (looking-at meta-left-comment-regexp))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (current-column)
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
570 (skip-chars-backward "\t\f ")
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
571 (max (if (bolp) 0 (1+ (current-column)))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 comment-column)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (defun meta-indent-line ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 "Indent the line containing point as Metafont or MetaPost source."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (let ((indent (meta-indent-calculate)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (if (/= (current-indentation) indent)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (let ((beg (progn (beginning-of-line) (point)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (end (progn (back-to-indentation) (point))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (delete-region beg end)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (indent-to indent))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 (if (< (current-column) indent)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 (back-to-indentation))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 (defun meta-indent-calculate ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 "Return the indentation of current line of Metafont or MetaPost source."
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
589 ;; Indentation within strings is not considered as Meta* don't allow multi
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
590 ;; line strings.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 (back-to-indentation)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
593 (cond
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
594 ;; Comments to the left margin.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 ((and meta-left-comment-regexp
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (looking-at meta-left-comment-regexp))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 0)
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
598 ;; Comments to the right margin.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 ((and meta-right-comment-regexp
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 (looking-at meta-right-comment-regexp))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 comment-column)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ;; Comments best left alone.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
603 ((and meta-ignore-comment-regexp
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 (looking-at meta-ignore-comment-regexp))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 (current-indentation))
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
606 ;; Beginning of buffer.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
607 ((eq (point-at-bol) (point-min))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
608 0)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 ;; Backindent at end of environments.
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
610 ((meta-indent-looking-at-code
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 (concat "\\<" meta-end-environment-regexp "\\>"))
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
612 (- (meta-indent-current-indentation) meta-indent-level))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 ;; Backindent at keywords within environments.
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
614 ((meta-indent-looking-at-code
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 (concat "\\<" meta-within-environment-regexp "\\>"))
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
616 (- (meta-indent-current-indentation) meta-indent-level))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
617 (t (meta-indent-current-indentation)))))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
618
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
619 (defun meta-indent-in-string-p ()
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
620 "Tell if the point is in a string."
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
621 (or (nth 3 (syntax-ppss))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
622 (eq (get-text-property (point) 'face) font-lock-string-face)))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
624 (defun meta-indent-looking-at-code (regexp)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
625 "Same as `looking-at' but checks that the point is not in a string."
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
626 (unless (meta-indent-in-string-p)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
627 (looking-at regexp)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
628
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
629 (defun meta-indent-previous-line ()
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
630 "Go to the previous line of code, skipping comments."
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
631 (skip-chars-backward "\n\t\f ")
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
632 (move-to-column (current-indentation))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
633 ;; Ignore comments.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
634 (while (and (looking-at comment-start) (not (bobp)))
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
635 (skip-chars-backward "\n\t\f ")
84453
7fda06536470 (meta-indent-unfinished-line): Do not say that a `%' in a string is
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84451
diff changeset
636 (when (not (bobp))
7fda06536470 (meta-indent-unfinished-line): Do not say that a `%' in a string is
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84451
diff changeset
637 (move-to-column (current-indentation)))))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
639 (defun meta-indent-unfinished-line ()
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
640 "Tell if the current line of code ends with an unfinished expression."
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
641 (save-excursion
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
642 (end-of-line)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
643 ;; Skip backward the comments.
84453
7fda06536470 (meta-indent-unfinished-line): Do not say that a `%' in a string is
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84451
diff changeset
644 (let ((point-not-in-string (point)))
7fda06536470 (meta-indent-unfinished-line): Do not say that a `%' in a string is
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84451
diff changeset
645 (while (search-backward comment-start (point-at-bol) t)
7fda06536470 (meta-indent-unfinished-line): Do not say that a `%' in a string is
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84451
diff changeset
646 (unless (meta-indent-in-string-p)
7fda06536470 (meta-indent-unfinished-line): Do not say that a `%' in a string is
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84451
diff changeset
647 (setq point-not-in-string (point))))
7fda06536470 (meta-indent-unfinished-line): Do not say that a `%' in a string is
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84451
diff changeset
648 (goto-char point-not-in-string))
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
649 ;; Search for the end of the previous expression.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
650 (if (search-backward ";" (point-at-bol) t)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
651 (progn (while (and (meta-indent-in-string-p)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
652 (search-backward ";" (point-at-bol) t)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
653 (if (= (char-after) ?\;)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
654 (forward-char)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
655 (beginning-of-line)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
656 (beginning-of-line))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
657 ;; See if the last statement of the line is environment-related,
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
658 ;; or exists at all.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
659 (if (meta-indent-looking-at-code
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
660 (concat "[ \t\f]*\\($\\|" (regexp-quote comment-start)
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
661 "\\|\\<" meta-end-environment-regexp "\\>"
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
662 "\\|\\<" meta-begin-environment-regexp "\\>"
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
663 "\\|\\<" meta-within-environment-regexp "\\>\\)"))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
664 nil
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
665 t)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
666
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
667 (defun meta-indent-current-indentation ()
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
668 "Return the indentation wanted for the current line of code."
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
669 (+ (meta-indent-current-nesting)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
670 (if (save-excursion
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
671 (back-to-indentation)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
672 (and (not (looking-at (concat "\\<" meta-end-environment-regexp "\\>"
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
673 "\\|\\<" meta-within-environment-regexp "\\>")))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
674 (progn (meta-indent-previous-line)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
675 (meta-indent-unfinished-line))))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
676 meta-indent-level
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
677 0)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
678
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
679 (defun meta-indent-current-nesting ()
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
680 "Return the indentation according to the nearest environment keyword."
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
681 (save-excursion
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
682 (save-restriction
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
683 (widen)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
684 (back-to-indentation)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
685 (let ((to-add 0))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
686 ;; If we found some environment marker backward...
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
687 (if (catch 'found
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
688 (while (re-search-backward
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
689 (concat "(\\|)\\|\\<" meta-end-environment-regexp "\\>"
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
690 "\\|\\<" meta-begin-environment-regexp "\\>"
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
691 "\\|\\<" meta-within-environment-regexp "\\>")
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
692 nil t)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
693 ;; If we aren't in a string or in a comment, we've found something.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
694 (unless (or (meta-indent-in-string-p)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
695 (nth 4 (syntax-ppss)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
696 (cond ((= (char-after) ?\()
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
697 (setq to-add (+ to-add meta-indent-level)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
698 ((= (char-after) ?\))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
699 (setq to-add (- to-add meta-indent-level)))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
700 (t (throw 'found t))))))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
701 (progn
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
702 ;; ... then use it to compute the current indentation.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
703 (back-to-indentation)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
704 (+ to-add (current-indentation) (meta-indent-level-count)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
705 ;; Compensate for backindent of end and within keywords.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
706 (if (meta-indent-looking-at-code
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
707 (concat "\\<" meta-end-environment-regexp "\\>\\|"
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
708 "\\<" meta-within-environment-regexp "\\>"))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
709 meta-indent-level
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
710 ;; Compensate for unfinished line.
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
711 (if (save-excursion
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
712 (meta-indent-previous-line)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
713 (meta-indent-unfinished-line))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
714 (- meta-indent-level)
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
715 0))))
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
716 0)))))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 (defun meta-indent-level-count ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 "Count indentation change for begin-end commands in the current line."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (save-restriction
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (let ((count 0))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
723 (narrow-to-region
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (point) (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 (re-search-forward "[^\\\\\"]%\\|\n\\|\\'" nil t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (backward-char) (point)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (while (re-search-forward "\\<\\sw+\\>\\|(\\|)" nil t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (goto-char (match-beginning 0))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (cond
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 ;; Count number of begin-end keywords within line.
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
732 ((meta-indent-looking-at-code
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (concat "\\<" meta-begin-environment-regexp "\\>"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (setq count (+ count meta-indent-level)))
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
735 ((meta-indent-looking-at-code
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (concat "\\<" meta-end-environment-regexp "\\>"))
82450
be32023b5c7b (meta-indent-calculate-last): Remove.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78234
diff changeset
737 (setq count (- count meta-indent-level))))))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 count))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 ;;; Editing commands.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
744 (defcustom meta-begin-defun-regexp
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 (concat "\\(begin\\(char\\|fig\\|logochar\\)\\|def\\|mode_def\\|"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 "primarydef\\|secondarydef\\|tertiarydef\\|vardef\\)")
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
747 "*Regexp matching beginning of defuns in Metafont or MetaPost mode."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
748 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
749 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
751 (defcustom meta-end-defun-regexp
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 (concat "\\(end\\(char\\|def\\|fig\\)\\)")
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
753 "*Regexp matching the end of defuns in Metafont or MetaPost mode."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
754 :type 'regexp
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
755 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (defun meta-beginning-of-defun (&optional arg)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 "Move backward to beginnning of a defun in Metafont or MetaPost code.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
760 With numeric argument, do it that many times.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 Negative arg -N means move forward to Nth following beginning of defun.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 Returns t unless search stops due to beginning or end of buffer."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (interactive "p")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (if (or (null arg) (= 0 arg)) (setq arg 1))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (and arg (< arg 0) (not (eobp)) (forward-char 1))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
766 (and (re-search-backward
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 (concat "\\<" meta-begin-defun-regexp "\\>") nil t arg)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (progn (goto-char (match-beginning 0))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (skip-chars-backward "%")
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
770 (skip-chars-backward " \t\f") t)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
771
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 (defun meta-end-of-defun (&optional arg)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 "Move forward to end of a defun in Metafont or MetaPost code.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
774 With numeric argument, do it that many times.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 Negative argument -N means move back to Nth preceding end of defun.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 Returns t unless search stops due to beginning or end of buffer."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 (interactive "p")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 (if (or (null arg) (= 0 arg)) (setq arg 1))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 (and (< arg 0) (not (bobp)) (forward-line -1))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 (and (re-search-forward
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 (concat "\\<" meta-end-defun-regexp "\\>") nil t arg)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 (progn (goto-char (match-end 0))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 (skip-chars-forward ";")
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
784 (skip-chars-forward " \t\f")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 (if (looking-at "\n") (forward-line 1)) t)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 (defun meta-comment-region (beg end &optional arg)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 "Comment out active region as Metafont or MetaPost source."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 (interactive "r")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 (comment-region beg end arg))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 (defun meta-uncomment-region (beg end)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 "Uncomment active region as Metafont or MetaPost source."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 (interactive "r")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 (comment-region beg end -1))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 (defun meta-comment-defun (&optional arg)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 "Comment out current environment as Metafont or MetaPost source.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 With prefix argument, uncomment the environment.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 The environment used is the one that contains point or follows point."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (interactive "P")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (let* ((end (if (meta-end-of-defun) (point) (point-max)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 (beg (if (meta-beginning-of-defun) (point) (point-min))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 (comment-region beg end arg))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 (defun meta-uncomment-defun ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 "Uncomment current environment as Metafont or MetaPost source."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 (meta-comment-defun -1))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 (defun meta-indent-region (beg end)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 "Indent the active region as Metafont or MetaPost source."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 (interactive "r")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 (indent-region beg end nil))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 (defun meta-indent-buffer ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 "Indent the whole buffer contents as Metafont or MetaPost source."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 (indent-region (point-min) (point-max) nil)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 (defun meta-indent-defun ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 "Indent the current environment as Metafont or MetaPost source.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 The environment indented is the one that contains point or follows point."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 (save-excursion
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 (let* ((end (if (meta-end-of-defun) (point) (point-max)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 (beg (if (meta-beginning-of-defun) (point) (point-min))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 (indent-region beg end nil))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 (defun meta-mark-defun ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 "Put mark at end of the environment, point at the beginning.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 The environment marked is the one that contains point or follows point."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 (push-mark (point))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 (meta-end-of-defun)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 (push-mark (point) nil t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 (meta-beginning-of-defun))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 ;;; Syntax table, keymap and menu.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 (defvar meta-mode-abbrev-table nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 "Abbrev table used in Metafont or MetaPost mode.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 (define-abbrev-table 'meta-mode-abbrev-table ())
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851
84654
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
852 (defvar meta-mode-syntax-table
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
853 (let ((st (make-syntax-table)))
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
854 ;; underscores are word constituents
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
855 (modify-syntax-entry ?_ "w" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
856 ;; miscellaneous non-word symbols
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
857 (modify-syntax-entry ?# "_" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
858 (modify-syntax-entry ?@ "_" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
859 (modify-syntax-entry ?$ "_" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
860 (modify-syntax-entry ?? "_" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
861 (modify-syntax-entry ?! "_" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
862 ;; binary operators
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
863 (modify-syntax-entry ?& "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
864 (modify-syntax-entry ?+ "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
865 (modify-syntax-entry ?- "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
866 (modify-syntax-entry ?/ "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
867 (modify-syntax-entry ?* "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
868 (modify-syntax-entry ?. "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
869 (modify-syntax-entry ?: "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
870 (modify-syntax-entry ?= "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
871 (modify-syntax-entry ?< "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
872 (modify-syntax-entry ?> "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
873 (modify-syntax-entry ?| "." st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
874 ;; opening and closing delimiters
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
875 (modify-syntax-entry ?\( "()" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
876 (modify-syntax-entry ?\) ")(" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
877 (modify-syntax-entry ?\[ "(]" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
878 (modify-syntax-entry ?\] ")[" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
879 (modify-syntax-entry ?\{ "(}" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
880 (modify-syntax-entry ?\} "){" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
881 ;; comment character
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
882 (modify-syntax-entry ?% "<" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
883 (modify-syntax-entry ?\n ">" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
884 ;; escape character, needed for embedded TeX code
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
885 (modify-syntax-entry ?\\ "\\" st)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
886 st)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 "Syntax table used in Metafont or MetaPost mode.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888
84654
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
889 (defvar meta-mode-map
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
890 (let ((map (make-sparse-keymap)))
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
891 (define-key map "\C-m" 'reindent-then-newline-and-indent)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
892 ;; Comment Paragraphs:
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
893 ;; (define-key map "\M-a" 'backward-sentence)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
894 ;; (define-key map "\M-e" 'forward-sentence)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
895 ;; (define-key map "\M-h" 'mark-paragraph)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
896 ;; (define-key map "\M-q" 'fill-paragraph)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
897 ;; Navigation:
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
898 (define-key map "\M-\C-a" 'meta-beginning-of-defun)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
899 (define-key map "\M-\C-e" 'meta-end-of-defun)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
900 (define-key map "\M-\C-h" 'meta-mark-defun)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
901 ;; Indentation:
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
902 (define-key map "\M-\C-q" 'meta-indent-defun)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
903 (define-key map "\C-c\C-qe" 'meta-indent-defun)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
904 (define-key map "\C-c\C-qr" 'meta-indent-region)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
905 (define-key map "\C-c\C-qb" 'meta-indent-buffer)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
906 ;; Commenting Out:
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
907 (define-key map "\C-c%" 'meta-comment-defun)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
908 ;; (define-key map "\C-uC-c%" 'meta-uncomment-defun)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
909 (define-key map "\C-c;" 'meta-comment-region)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
910 (define-key map "\C-c:" 'meta-uncomment-region)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
911 ;; Symbol Completion:
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
912 (define-key map "\M-\t" 'meta-complete-symbol)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
913 ;; Shell Commands:
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
914 ;; (define-key map "\C-c\C-c" 'meta-command-file)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
915 ;; (define-key map "\C-c\C-k" 'meta-kill-job)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
916 ;; (define-key map "\C-c\C-l" 'meta-recenter-output)
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
917 map)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 "Keymap used in Metafont or MetaPost mode.")
84654
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
919
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
921 (easy-menu-define
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 meta-mode-menu meta-mode-map
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 "Menu used in Metafont or MetaPost mode."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 (list "Meta"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 ["Forward Environment" meta-beginning-of-defun t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 ["Backward Environment" meta-end-of-defun t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 "--"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 ["Indent Line" meta-indent-line t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 ["Indent Environment" meta-indent-defun t]
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
930 ["Indent Region" meta-indent-region
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 :active (meta-mark-active)]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 ["Indent Buffer" meta-indent-buffer t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 "--"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 ["Comment Out Environment" meta-comment-defun t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 ["Uncomment Environment" meta-uncomment-defun t]
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
936 ["Comment Out Region" meta-comment-region
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 :active (meta-mark-active)]
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
938 ["Uncomment Region" meta-uncomment-region
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 :active (meta-mark-active)]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 "--"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 ["Complete Symbol" meta-complete-symbol t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 ; "--"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 ; ["Command on Buffer" meta-command-file t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 ; ["Kill Job" meta-kill-job t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 ; ["Recenter Output Buffer" meta-recenter-output-buffer t]
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 ))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 ;; Compatibility: XEmacs doesn't have the `mark-active' variable.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 (defun meta-mark-active ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 "Return whether the mark and region are currently active in this buffer."
60142
d1fdce4dfc73 (meta-mark-active): Fix condition to just
David Kastrup <dak@gnu.org>
parents: 56756
diff changeset
951 (if (boundp 'mark-active) mark-active (mark)))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 ;;; Hook variables.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
957 (defcustom meta-mode-load-hook nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
958 "*Hook evaluated when first loading Metafont or MetaPost mode."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
959 :type 'hook
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
960 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
962 (defcustom meta-common-mode-hook nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
963 "*Hook evaluated by both `metafont-mode' and `metapost-mode'."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
964 :type 'hook
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
965 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966
20781
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
967 (defcustom metafont-mode-hook nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
968 "*Hook evaluated by `metafont-mode' after `meta-common-mode-hook'."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
969 :type 'hook
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
970 :group 'meta-font)
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
971 (defcustom metapost-mode-hook nil
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
972 "*Hook evaluated by `metapost-mode' after `meta-common-mode-hook'."
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
973 :type 'hook
6f55b3849106 Customized.
Andreas Schwab <schwab@suse.de>
parents: 19099
diff changeset
974 :group 'meta-font)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 ;;; Initialization.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 (defun meta-common-initialization ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 "Common initialization for Metafont or MetaPost mode."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 (kill-all-local-variables)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 (make-local-variable 'paragraph-start)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 (make-local-variable 'paragraph-separate)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
986 (setq paragraph-start
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (concat page-delimiter "\\|$"))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
988 (setq paragraph-separate
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 (concat page-delimiter "\\|$"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 (make-local-variable 'paragraph-ignore-fill-prefix)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 (setq paragraph-ignore-fill-prefix t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 (make-local-variable 'comment-start-skip)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 (make-local-variable 'comment-start)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 (make-local-variable 'comment-end)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 (make-local-variable 'comment-multi-line)
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
998 (setq comment-start-skip "%+[ \t\f]*")
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 (setq comment-start "%")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 (setq comment-end "")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 (setq comment-multi-line nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002
84451
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
1003 ;; We use `back-to-indentation' but \f is no indentation sign.
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
1004 (modify-syntax-entry ?\f "_ ")
3258c63732d1 (meta-font-lock-keywords)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 82450
diff changeset
1005
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 (make-local-variable 'parse-sexp-ignore-comments)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 (setq parse-sexp-ignore-comments t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 (make-local-variable 'comment-indent-function)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 (setq comment-indent-function 'meta-comment-indent)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 (make-local-variable 'indent-line-function)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 (setq indent-line-function 'meta-indent-line)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 ;; No need to define a mode-specific 'indent-region-function.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 ;; Simply use the generic 'indent-region and 'comment-region.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 ;; Set defaults for font-lock mode.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 (make-local-variable 'font-lock-defaults)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 (setq font-lock-defaults
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 '(meta-font-lock-keywords
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 nil nil ((?_ . "w")) nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (font-lock-comment-start-regexp . "%")))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 ;; Activate syntax table, keymap and menu.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 (setq local-abbrev-table meta-mode-abbrev-table)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 (set-syntax-table meta-mode-syntax-table)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 (use-local-map meta-mode-map)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 (easy-menu-add meta-mode-menu)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 )
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030
18924
f4b6329afef0 Update copyright notice and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 18388
diff changeset
1031 ;;;###autoload
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 (defun metafont-mode ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 "Major mode for editing Metafont sources.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 Special commands:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 \\{meta-mode-map}
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 Turning on Metafont mode calls the value of the variables
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 `meta-common-mode-hook' and `metafont-mode-hook'."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 (meta-common-initialization)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 (setq mode-name "Metafont")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 (setq major-mode 'metafont-mode)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 ;; Set defaults for completion function.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 (make-local-variable 'meta-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 (make-local-variable 'meta-symbol-changed)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 (make-local-variable 'meta-complete-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 (setq meta-symbol-list nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 (setq meta-symbol-changed nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 (apply 'meta-add-symbols metafont-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 (setq meta-complete-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 (list "" 'ispell-complete-word)))
62772
f2892faa87d4 * progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents: 60142
diff changeset
1054 (run-mode-hooks 'meta-common-mode-hook 'metafont-mode-hook))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055
18924
f4b6329afef0 Update copyright notice and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 18388
diff changeset
1056 ;;;###autoload
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 (defun metapost-mode ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 "Major mode for editing MetaPost sources.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 Special commands:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 \\{meta-mode-map}
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 Turning on MetaPost mode calls the value of the variable
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 `meta-common-mode-hook' and `metafont-mode-hook'."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (meta-common-initialization)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 (setq mode-name "MetaPost")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 (setq major-mode 'metapost-mode)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 ;; Set defaults for completion function.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 (make-local-variable 'meta-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 (make-local-variable 'meta-symbol-changed)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 (make-local-variable 'meta-complete-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 (setq meta-symbol-list nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (setq meta-symbol-changed nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 (apply 'meta-add-symbols metapost-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 (setq meta-complete-list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 (list "" 'ispell-complete-word)))
62772
f2892faa87d4 * progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents: 60142
diff changeset
1079 (run-mode-hooks 'meta-common-mode-hook 'metapost-mode-hook))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 ;;; Just in case ...
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 (provide 'meta-mode)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 (run-hooks 'meta-mode-load-hook)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086
84654
9b686572bf3f (meta-mode-syntax-table): Move init into decl.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84453
diff changeset
1087 ;; arch-tag: ec2916b2-3a83-4cf7-962d-d8019370c006
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 ;;; meta-mode.el ends here