annotate lisp/align.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 5f6bc820aec9
children 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: 32451
diff changeset
1 ;;; align.el --- align text to a specific column, by regexp
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
109940
5f6bc820aec9 Minor align-regexp fix.
Glenn Morris <rgm@gnu.org>
parents: 109695
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
5f6bc820aec9 Minor align-regexp fix.
Glenn Morris <rgm@gnu.org>
parents: 109695
diff changeset
4 ;; 2008, 2009, 2010 Free Software Foundation, Inc.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
6 ;; Author: John Wiegley <johnw@gnu.org>
74615
ac990ee1126d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 74439
diff changeset
7 ;; Maintainer: FSF
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 ;; Keywords: convenience languages lisp
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; (at your option) any later version.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 ;; This mode allows you to align regions in a context-sensitive fashion.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;; The classic use is to align assignments:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;; int a = 1;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;; short foo = 2;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;; double blah = 4;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 ;; becomes
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;; int a = 1;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;; short foo = 2;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 ;; double blah = 4;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 ;;; Usage:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 ;; There are several variables which define how certain "categories"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 ;; of syntax are to be treated. These variables go by the name
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 ;; `align-CATEGORY-modes'. For example, "c++" is such a category.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 ;; There are several rules which apply to c++, but since several other
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 ;; languages have a syntax similar to c++ (e.g., c, java, etc), these
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 ;; modes are treated as belonging to the same category.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 ;; If you want to add a new mode under a certain category, just
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 ;; customize that list, or add the new mode manually. For example, to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 ;; make jde-mode a c++ category mode, use this code in your .emacs
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 ;; file:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 ;; (setq align-c++-modes (cons 'jde-mode align-c++-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 ;; In some programming modes, it's useful to have the aligner run only
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 ;; after indentation is performed. To achieve this, customize or set
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 ;; the variable `align-indent-before-aligning' to t.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 ;;; Module Authors:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 ;; In order to incorporate align's functionality into your own
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 ;; modules, there are only a few steps you have to follow.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 ;; 1. Require or load in the align.el library.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 ;; 2. Define your alignment and exclusion rules lists, either
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 ;; customizable or not.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 ;; 3. In your mode function, set the variables
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 ;; `align-mode-rules-list' and `align-mode-exclude-rules-list'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 ;; to your own rules lists.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 ;; If there is any need to add your mode name to one of the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 ;; align-?-modes variables (for example, `align-dq-string-modes'), use
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 ;; `add-to-list', or some similar function which checks first to see
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 ;; if the value is already there. Since the user may customize that
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 ;; mode list, and then write your mode name into their .emacs file,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 ;; causing the symbol already to be present the next time they load
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 ;; your package.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 ;; Example:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 ;; (require 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 ;; (defcustom my-align-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 ;; '((my-rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 ;; (regexp . "Sample")))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 ;; :type align-rules-list-type
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 ;; :group 'my-package)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 ;; (put 'my-align-rules-list 'risky-local-variable t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 ;; (add-to-list 'align-dq-string-modes 'my-package-mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 ;; (add-to-list 'align-open-comment-modes 'my-package-mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 ;; (defun my-mode ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 ;; ...
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 ;; (setq align-mode-rules-list my-align-rules-list))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 ;;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 ;; Note that if you need to install your own exclusion rules, then you
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 ;; will also need to reproduce any double-quoted string, or open
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 ;; comment exclusion rules that are defined in the standard
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 ;; `align-exclude-rules-list'. At the moment there is no convenient
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 ;; way to mix both mode-local and global rules lists.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107 ;;; History:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 ;; Version 1.0 was created in the earlier part of 1996, using a very
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 ;; simple algorithm that understand only basic regular expressions.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 ;; Parts of the code were broken up and included in vhdl-mode.el
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 ;; around this time. After several comments from users, and a need to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 ;; find a more robust, performant algorithm, 2.0 was born in late
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 ;; 1998. Many different approaches were taken (mostly due to the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 ;; complexity of TeX tables), but finally a scheme was discovered
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 ;; which worked fairly well for most common usage cases. Development
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 ;; beyond version 2.8 is not planned, except for problems that users
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 ;; might encounter.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 ;;; Code:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122 (defgroup align nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123 "Align text to a specific column, by regexp."
30890
7bd10623068c (align) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 30254
diff changeset
124 :version "21.1"
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 :group 'fill)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127 ;;; User Variables:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129 (defcustom align-load-hook nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
130 "Hook that gets run after the aligner has been loaded."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 :type 'hook
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
132 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 (defcustom align-indent-before-aligning nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
135 "If non-nil, indent the marked region before aligning it."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 :type 'boolean
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 (defcustom align-default-spacing 1
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
140 "An integer that represents the default amount of padding to use.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
141 If `align-to-tab-stop' is non-nil, this will represent the number of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 tab stops to use for alignment, rather than the number of spaces.
109695
215efa9f5db1 align.el: Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 106815
diff changeset
143 Each alignment rule can optionally override both this variable and
215efa9f5db1 align.el: Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 106815
diff changeset
144 `align-to-tab-stop'. See `align-rules-list'."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 :type 'integer
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
148 (defcustom align-to-tab-stop 'indent-tabs-mode
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
149 "If non-nil, alignments will always fall on a tab boundary.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 It may also be a symbol, whose value will be taken."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151 :type '(choice (const nil) symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154 (defcustom align-region-heuristic 500
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
155 "If non-nil, used as a heuristic by `align-current'.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 Since each alignment rule can possibly have its own set of alignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 sections (whenever `align-region-separate' is non-nil, and not a
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158 string), this heuristic is used to determine how far before and after
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 point we should search in looking for a region separator. Larger
109695
215efa9f5db1 align.el: Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 106815
diff changeset
160 values can mean slower performance in large files, although smaller
215efa9f5db1 align.el: Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 106815
diff changeset
161 values may cause unexpected behavior at times."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 :type 'integer
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165 (defcustom align-highlight-change-face 'highlight
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
166 "The face to highlight with if changes are necessary."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 :type 'face
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 (defcustom align-highlight-nochange-face 'secondary-selection
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
171 "The face to highlight with if no changes are necessary."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 :type 'face
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 (defcustom align-large-region 10000
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
176 "If an integer, defines what constitutes a \"large\" region.
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
177 If nil, then no messages will ever be printed to the minibuffer."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 :type 'integer
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 (defcustom align-c++-modes '(c++-mode c-mode java-mode)
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
182 "A list of modes whose syntax resembles C/C++."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
185
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186 (defcustom align-perl-modes '(perl-mode cperl-mode)
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
187 "A list of modes where Perl syntax is to be seen."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
189 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191 (defcustom align-lisp-modes
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 '(emacs-lisp-mode lisp-interaction-mode lisp-mode scheme-mode)
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
193 "A list of modes whose syntax resembles Lisp."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197 (defcustom align-tex-modes
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 '(tex-mode plain-tex-mode latex-mode slitex-mode)
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
199 "A list of modes whose syntax resembles TeX (and family)."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203 (defcustom align-text-modes '(text-mode outline-mode)
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
204 "A list of modes whose content is plain text."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
208 (defcustom align-dq-string-modes
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
209 (append align-lisp-modes align-c++-modes align-perl-modes
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
210 '(python-mode))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
211 "A list of modes where double quoted strings should be excluded."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
215 (defcustom align-sq-string-modes
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
216 (append align-perl-modes '(python-mode))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
217 "A list of modes where single quoted strings should be excluded."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
221 (defcustom align-open-comment-modes
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
222 (append align-lisp-modes align-c++-modes align-perl-modes
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
223 '(python-mode makefile-mode))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
224 "A list of modes with a single-line comment syntax.
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
225 These are comments as in Lisp, which have a beginning, but end with
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226 the line (i.e., `comment-end' is an empty string)."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227 :type '(repeat symbol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 (defcustom align-region-separate "^\\s-*[{}]?\\s-*$"
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
231 "Select the method by which alignment sections will be separated.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232 If this is a symbol, that symbol's value will be used.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234 For the sake of clarification, consider the following example, which
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 will be referred to in the descriptions below.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237 int alpha = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 double beta = 2.0;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 long gamma; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 unsigned int delta = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242 long double epsilon = 3.0;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 long long omega; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245 The possible settings for `align-region-separate' are:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247 `entire' The entire region being aligned will be considered as a
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
248 single alignment section. Assuming that comments were not
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
249 being aligned to a particular column, the example would
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
250 become:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
251
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252 int alpha = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 double beta = 2.0;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
254 long gamma; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
256 unsigned int delta = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257 long double epsilon;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
258 long long chi = 10; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260 `group' Each contiguous set of lines where a specific alignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261 occurs is considered a section for that alignment rule.
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
262 Note that each rule may have any entirely different set
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
263 of section divisions than another.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
264
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265 int alpha = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266 double beta = 2.0;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
267 long gamma; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 unsigned int delta = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270 long double epsilon;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 long long chi = 10; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 `largest' When contiguous rule sets overlap, the largest section
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274 described will be taken as the alignment section for each
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 rule touched by that section.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 int alpha = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 double beta = 2.0;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 long gamma; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 unsigned int delta = 1; /* one */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
282 long double epsilon;
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 long long chi = 10; /* ten */
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
285 NOTE: This option is not supported yet, due to algorithmic
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286 issues which haven't been satisfactorily resolved. There
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
287 are ways to do it, but they're both ugly and resource
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
288 consumptive.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
290 regexp A regular expression string which defines the section
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 divider. If the mode you're in has a consistent divider
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 between sections, the behavior will be very similar to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293 `largest', and faster. But if the mode does not use clear
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 separators (for example, if you collapse your braces onto
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
295 the preceding statement in C or Perl), `largest' is
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296 probably the better alternative.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
298 function A function that will be passed the beginning and ending
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
299 locations of the region in which to look for the section
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
300 separator. At the very beginning of the attempt to align,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
301 both of these parameters will be nil, in which case the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 function should return non-nil if it wants each rule to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
303 define its own section, or nil if it wants the largest
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
304 section found to be used as the common section for all
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
305 rules that occur there.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
306
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
307 list A list of markers within the buffer that represent where
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
308 the section dividers lie. Be certain to use markers! For
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
309 when the aligning begins, the ensuing contract/expanding of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
310 whitespace will throw off any non-marker positions.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
311
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
312 This method is intended for use in Lisp programs, and not
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
313 by the user."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
314 :type '(choice
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
315 (const :tag "Entire region is one section" entire)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
316 (const :tag "Align by contiguous groups" group)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
317 ; (const largest)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318 (regexp :tag "Regexp defines section boundaries")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
319 (function :tag "Function defines section boundaries"))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
320 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
321
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
322 (put 'align-region-separate 'risky-local-variable t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
323
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
324 (defvar align-rules-list-type
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
325 '(repeat
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
326 (cons
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
327 :tag "Alignment rule"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
328 (symbol :tag "Title")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
329 (cons :tag "Required attributes"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
330 (cons :tag "Regexp"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
331 (const :tag "(Regular expression to match)" regexp)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
332 (choice :value "\\(\\s-+\\)" regexp function))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 (repeat
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
334 :tag "Optional attributes"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
335 (choice
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
336 (cons :tag "Repeat"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
337 (const :tag "(Repeat this rule throughout line)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
338 repeat)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
339 (boolean :value t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
340 (cons :tag "Paren group"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
341 (const :tag "(Parenthesis group to use)" group)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
342 (choice :value 2
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
343 integer (repeat integer)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
344 (cons :tag "Modes"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
345 (const :tag "(Modes where this rule applies)" modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
346 (sexp :value (text-mode)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
347 (cons :tag "Case-fold"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
348 (const :tag "(Should case be ignored for this rule)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
349 case-fold)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
350 (boolean :value t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
351 (cons :tag "To Tab Stop"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
352 (const :tag "(Should rule align to tab stops)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
353 tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
354 (boolean :value nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
355 (cons :tag "Valid"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
356 (const :tag "(Return non-nil if rule is valid)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
357 valid)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
358 (function :value t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
359 (cons :tag "Run If"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
360 (const :tag "(Return non-nil if rule should run)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
361 run-if)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
362 (function :value t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
363 (cons :tag "Column"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
364 (const :tag "(Column to fix alignment at)" column)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
365 (choice :value comment-column
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
366 integer symbol))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
367 (cons :tag "Spacing"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
368 (const :tag "(Amount of spacing to use)" spacing)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
369 (integer :value 1))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
370 (cons :tag "Justify"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
371 (const :tag "(Should text be right justified)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
372 justify)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
373 (boolean :value t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
374 ;; make sure this stays up-to-date with any changes
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
375 ;; in `align-region-separate'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
376 (cons :tag "Separate"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
377 (const :tag "(Separation to use for this rule)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
378 separate)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
379 (choice :value "^\\s-*$"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
380 (const entire)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
381 (const group)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
382 ; (const largest)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
383 regexp function)))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
384 "The `type' form for any `align-rules-list' variable.")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
385
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
386 (defcustom align-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
387 `((lisp-second-arg
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
388 (regexp . "\\(^\\s-+[^( \t\n]\\|(\\(\\S-+\\)\\s-+\\)\\S-+\\(\\s-+\\)")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
389 (group . 3)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
390 (modes . align-lisp-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
391 (run-if . ,(function (lambda () current-prefix-arg))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
392
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
393 (lisp-alist-dot
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
394 (regexp . "\\(\\s-*\\)\\.\\(\\s-*\\)")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
395 (group . (1 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
396 (modes . align-lisp-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
397
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
398 (open-comment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
399 (regexp . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
400 (lambda (end reverse)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
401 (funcall (if reverse 're-search-backward
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
402 're-search-forward)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
403 (concat "[^ \t\n\\\\]"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
404 (regexp-quote comment-start)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
405 "\\(.+\\)$") end t))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
406 (modes . align-open-comment-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
407
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
408 (c-macro-definition
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
409 (regexp . "^\\s-*#\\s-*define\\s-+\\S-+\\(\\s-+\\)")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
410 (modes . align-c++-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
411
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
412 (c-variable-declaration
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
413 (regexp . ,(concat "[*&0-9A-Za-z_]>?[&*]*\\(\\s-+[*&]*\\)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
414 "[A-Za-z_][0-9A-Za-z:_]*\\s-*\\(\\()\\|"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
415 "=[^=\n].*\\|(.*)\\|\\(\\[.*\\]\\)*\\)?"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
416 "\\s-*[;,]\\|)\\s-*$\\)"))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
417 (group . 1)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
418 (modes . align-c++-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
419 (justify . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
420 (valid
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
421 . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
422 (lambda ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
423 (not (or (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
424 (goto-char (match-beginning 1))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
425 (backward-word 1)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
426 (looking-at
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
427 "\\(goto\\|return\\|new\\|delete\\|throw\\)"))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
428 (if (and (boundp 'font-lock-mode) font-lock-mode)
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
429 (eq (get-text-property (point) 'face)
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
430 'font-lock-comment-face)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
431 (eq (caar (c-guess-basic-syntax)) 'c))))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
432
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
433 (c-assignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
434 (regexp . ,(concat "[^-=!^&*+<>/| \t\n]\\(\\s-*[-=!^&*+<>/|]*\\)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
435 "=\\(\\s-*\\)\\([^= \t\n]\\|$\\)"))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
436 (group . (1 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
437 (modes . align-c++-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
438 (justify . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
439 (tab-stop . nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
440
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
441 (perl-assignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
442 (regexp . ,(concat "[^=!^&*-+<>/| \t\n]\\(\\s-*\\)=[~>]?"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
443 "\\(\\s-*\\)\\([^>= \t\n]\\|$\\)"))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
444 (group . (1 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
445 (modes . align-perl-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
446 (tab-stop . nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
447
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
448 (python-assignment
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
449 (regexp . ,(concat "[^=!<> \t\n]\\(\\s-*\\)="
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
450 "\\(\\s-*\\)\\([^>= \t\n]\\|$\\)"))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
451 (group . (1 2))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
452 (modes . '(python-mode))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
453 (tab-stop . nil))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
454
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
455 (make-assignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
456 (regexp . "^\\s-*\\w+\\(\\s-*\\):?=\\(\\s-*\\)\\([^\t\n \\\\]\\|$\\)")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
457 (group . (1 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
458 (modes . '(makefile-mode))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
459 (tab-stop . nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
460
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
461 (c-comma-delimiter
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
462 (regexp . ",\\(\\s-*\\)[^/ \t\n]")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
463 (repeat . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
464 (modes . align-c++-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
465 (run-if . ,(function (lambda () current-prefix-arg))))
60505
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
466 ; (valid
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
467 ; . ,(function
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
468 ; (lambda ()
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
469 ; (memq (caar (c-guess-basic-syntax))
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
470 ; '(brace-list-intro
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
471 ; brace-list-entry
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
472 ; brace-entry-open))))))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
473
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
474 ;; With a prefix argument, comma delimiter will be aligned. Since
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
475 ;; perl-mode doesn't give us enough syntactic information (and we
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
476 ;; don't do our own parsing yet), this rule is too destructive to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
477 ;; run normally.
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
478 (basic-comma-delimiter
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
479 (regexp . ",\\(\\s-*\\)[^# \t\n]")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
480 (repeat . t)
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
481 (modes . (append align-perl-modes '(python-mode)))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
482 (run-if . ,(function (lambda () current-prefix-arg))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
483
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
484 (c++-comment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
485 (regexp . "\\(\\s-*\\)\\(//.*\\|/\\*.*\\*/\\s-*\\)$")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
486 (modes . align-c++-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
487 (column . comment-column)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
488 (valid . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
489 (lambda ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
490 (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
491 (goto-char (match-beginning 1))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
492 (not (bolp)))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
493
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
494 (c-chain-logic
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
495 (regexp . "\\(\\s-*\\)\\(&&\\|||\\|\\<and\\>\\|\\<or\\>\\)")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
496 (modes . align-c++-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
497 (valid . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
498 (lambda ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
499 (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
500 (goto-char (match-end 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
501 (looking-at "\\s-*\\(/[*/]\\|$\\)"))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
502
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
503 (perl-chain-logic
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
504 (regexp . "\\(\\s-*\\)\\(&&\\|||\\|\\<and\\>\\|\\<or\\>\\)")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
505 (modes . align-perl-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
506 (valid . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
507 (lambda ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
508 (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
509 (goto-char (match-end 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
510 (looking-at "\\s-*\\(#\\|$\\)"))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
511
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
512 (python-chain-logic
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
513 (regexp . "\\(\\s-*\\)\\(\\<and\\>\\|\\<or\\>\\)")
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
514 (modes . '(python-mode))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
515 (valid . ,(function
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
516 (lambda ()
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
517 (save-excursion
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
518 (goto-char (match-end 2))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
519 (looking-at "\\s-*\\(#\\|$\\|\\\\\\)"))))))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
520
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
521 (c-macro-line-continuation
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
522 (regexp . "\\(\\s-*\\)\\\\$")
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
523 (modes . align-c++-modes)
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
524 (column . c-backslash-column))
60505
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
525 ; (valid
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
526 ; . ,(function
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
527 ; (lambda ()
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
528 ; (memq (caar (c-guess-basic-syntax))
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
529 ; '(cpp-macro cpp-macro-cont))))))
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
530
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
531 (basic-line-continuation
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
532 (regexp . "\\(\\s-*\\)\\\\$")
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
533 (modes . '(python-mode makefile-mode)))
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
534
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
535 (tex-record-separator
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
536 (regexp . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
537 (lambda (end reverse)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
538 (align-match-tex-pattern "&" end reverse))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
539 (group . (1 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
540 (modes . align-tex-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
541 (repeat . t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
542
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
543 (tex-tabbing-separator
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
544 (regexp . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
545 (lambda (end reverse)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
546 (align-match-tex-pattern "\\\\[=>]" end reverse))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
547 (group . (1 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
548 (modes . align-tex-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
549 (repeat . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
550 (run-if . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
551 (lambda ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
552 (eq major-mode 'latex-mode)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
553
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
554 (tex-record-break
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
555 (regexp . "\\(\\s-*\\)\\\\\\\\")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
556 (modes . align-tex-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
557
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
558 ;; With a numeric prefix argument, or C-u, space delimited text
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
559 ;; tables will be aligned.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
560 (text-column
67698
fe96c1f121e3 (align-rules-list): Use [ \t] instead of \s-
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 67480
diff changeset
561 (regexp . "\\(^\\|\\S-\\)\\([ \t]+\\)\\(\\S-\\|$\\)")
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
562 (group . 2)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
563 (modes . align-text-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
564 (repeat . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
565 (run-if . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
566 (lambda ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
567 (and current-prefix-arg
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
568 (not (eq '- current-prefix-arg)))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
569
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
570 ;; With a negative prefix argument, lists of dollar figures will
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
571 ;; be aligned.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
572 (text-dollar-figure
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
573 (regexp . "\\$?\\(\\s-+[0-9]+\\)\\.")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
574 (modes . align-text-modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
575 (justify . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
576 (run-if . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
577 (lambda ()
60505
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
578 (eq '- current-prefix-arg)))))
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
579
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
580 (css-declaration
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
581 (regexp . "^\\s-*\\w+:\\(\\s-*\\).*;")
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
582 (group . (1))
c919a3aa031f 2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
John Wiegley <johnw@newartisans.com>
parents: 57972
diff changeset
583 (modes . '(css-mode html-mode))))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
584 "A list describing all of the available alignment rules.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
585 The format is:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
586
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
587 ((TITLE
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
588 (ATTRIBUTE . VALUE) ...)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
589 ...)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
590
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
591 The following attributes are meaningful:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
592
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
593 `regexp' This required attribute must be either a string describing
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
594 a regular expression, or a function (described below).
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
595 For every line within the section that this regular
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
596 expression matches, the given rule will be applied to that
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
597 line. The exclusion rules denote which part(s) of the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
598 line should not be modified; the alignment rules cause the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
599 identified whitespace group to be contracted/expanded such
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
600 that the \"alignment character\" (the character
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
601 immediately following the identified parenthesis group),
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
602 occurs in the same column for every line within the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
603 alignment section (see `align-region-separate' for a
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
604 description of how the region is broken up into alignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
605 sections).
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
606
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
607 The `regexp' attribute describes how the text should be
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
608 treated. Within this regexp, there must be at least one
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
609 group of characters (typically whitespace) identified by
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
610 the special opening and closing parens used in regexp
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
611 expressions (`\\\\(' and `\\\\)') (see the Emacs manual on
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
612 the syntax of regular expressions for more info).
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
613
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
614 If `regexp' is a function, it will be called as a
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
615 replacement for `re-search-forward'. This means that it
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
616 should return nil if nothing is found to match the rule,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
617 or it should set the match data appropriately, move point
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
618 to the end of the match, and return the value of point.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
619
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
620 `group' For exclusion rules, the group identifies the range of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
621 characters that should be ignored. For alignment rules,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
622 these are the characters that will be deleted/expanded for
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
623 the purposes of alignment. The \"alignment character\" is
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
624 always the first character immediately following this
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
625 parenthesis group. This attribute may also be a list of
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
626 integers, in which case multiple alignment characters will
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
627 be aligned, with the list of integers identifying the
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
628 whitespace groups which precede them. The default for
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
629 this attribute is 1.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
630
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
631 `modes' The `modes' attribute, if set, should name a list of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
632 major modes -- or evaluate to such a value -- in which the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
633 rule is valid. If not set, the rule will apply to all
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
634 modes.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
635
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
636 `case-fold' If `regexp' is an ordinary regular expression string
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
637 containing alphabetic character, sometimes you may want
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
638 the search to proceed case-insensitively (for languages
102734
c4853c1bf38c * align.el (align-large-region, align-perl-modes, align-rules-list)
Juanma Barranquero <lekktu@gmail.com>
parents: 101449
diff changeset
639 that ignore case, such as Pascal for example). In that
51264
ca3933891346 (align-rules-list): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 47920
diff changeset
640 case, set `case-fold' to a non-nil value, and the regular
ca3933891346 (align-rules-list): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 47920
diff changeset
641 expression search will ignore case. If `regexp' is set to
ca3933891346 (align-rules-list): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 47920
diff changeset
642 a function, that function must handle the job of ignoring
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
643 case by itself.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
644
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
645 `tab-stop' If the `tab-stop' attribute is set, and non-nil, the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
646 alignment character will always fall on a tab stop
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
647 (whether it uses tabs to get there or not depends on the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
648 value of `indent-tabs-mode'). If the `tab-stop' attribute
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
649 is set to nil, tab stops will never be used. Otherwise,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
650 the value of `align-to-tab-stop' determines whether or not
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
651 to align to a tab stop. The `tab-stop' attribute may also
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
652 be a list of t or nil values, corresponding to the number
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
653 of parenthesis groups specified by the `group' attribute.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
654
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
655 `repeat' If the `repeat' attribute is present, and non-nil, the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
656 rule will be applied to the line continuously until no
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
657 further matches are found.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
658
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
659 `valid' If the `valid' attribute is set, it will be used to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
660 determine whether the rule should be invoked. This form
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
661 is evaluated after the regular expression match has been
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
662 performed, so that it is possible to use the results of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
663 that match to determine whether the alignment should be
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
664 performed. The buffer should not be modified during the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
665 evaluation of this form.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
666
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
667 `run-if' Like `valid', the `run-if' attribute tests whether the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
668 rule should be run at all -- even before any searches are
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
669 done to determine if the rule applies to the alignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
670 region. This can save time, since `run-if' will only be
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
671 run once for each rule. If it returns nil, the rule will
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
672 not be attempted.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
673
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
674 `column' For alignment rules, if the `column' attribute is set --
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
675 which must be an integer, or a symbol whose value is an
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
676 integer -- it will be used as the column in which to align
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
677 the alignment character. If the text on a particular line
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
678 happens to overrun that column, a single space character,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
679 or tab stop (see `align-to-tab-stop') will be added
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
680 between the last text character and the alignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
681 character.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
682
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
683 `spacing' Alignment rules may also override the amount of spacing
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
684 that would normally be used by providing a `spacing'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
685 attribute. This must be an integer, or a list of integers
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
686 corresponding to the number of parenthesis groups matched
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
687 by the `group' attribute. If a list of value is used, and
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
688 any of those values is nil, `align-default-spacing' will
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
689 be used for that subgroup. See `align-default-spacing'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
690 for more details on spacing, tab stops, and how to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
691 indicate how much spacing should be used. If TAB-STOP is
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
692 present, it will override the value of `align-to-tab-stop'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
693 for that rule.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
694
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
695 `justify' It is possible with `regexp' and `group' to identify a
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
696 character group that contains more than just whitespace
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
697 characters. By default, any non-whitespace characters in
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
698 that group will also be deleted while aligning the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
699 alignment character. However, if the `justify' attribute
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
700 is set to a non-nil value, only the initial whitespace
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
701 characters within that group will be deleted. This has
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
702 the effect of right-justifying the characters that remain,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
703 and can be used for outdenting or just plain old right-
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
704 justification.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
705
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
706 `separate' Each rule can define its own section separator, which
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
707 describes how to identify the separation of \"sections\"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
708 within the region to be aligned. Setting the `separate'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
709 attribute overrides the value of `align-region-separate'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
710 (see the documentation of that variable for possible
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
711 values), and any separation argument passed to `align'."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
712 :type align-rules-list-type
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
713 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
714
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
715 (put 'align-rules-list 'risky-local-variable t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
716
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
717 (defvar align-exclude-rules-list-type
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
718 '(repeat
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
719 (cons
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
720 :tag "Exclusion rule"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721 (symbol :tag "Title")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
722 (cons :tag "Required attributes"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
723 (cons :tag "Regexp"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
724 (const :tag "(Regular expression to match)" regexp)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
725 (choice :value "\\(\\s-+\\)" regexp function))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
726 (repeat
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
727 :tag "Optional attributes"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
728 (choice
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
729 (cons :tag "Repeat"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
730 (const :tag "(Repeat this rule throughout line)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
731 repeat)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
732 (boolean :value t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
733 (cons :tag "Paren group"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
734 (const :tag "(Parenthesis group to use)" group)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
735 (choice :value 2
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
736 integer (repeat integer)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
737 (cons :tag "Modes"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
738 (const :tag "(Modes where this rule applies)" modes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
739 (sexp :value (text-mode)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
740 (cons :tag "Case-fold"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
741 (const :tag "(Should case be ignored for this rule)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
742 case-fold)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
743 (boolean :value t)))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
744 "The `type' form for any `align-exclude-rules-list' variable.")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
745
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
746 (defcustom align-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
747 `((exc-dq-string
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
748 (regexp . "\"\\([^\"\n]+\\)\"")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
749 (repeat . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
750 (modes . align-dq-string-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
751
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
752 (exc-sq-string
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
753 (regexp . "'\\([^'\n]+\\)'")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
754 (repeat . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
755 (modes . align-sq-string-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
756
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
757 (exc-open-comment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
758 (regexp
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
759 . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
760 (lambda (end reverse)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
761 (funcall (if reverse 're-search-backward
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
762 're-search-forward)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
763 (concat "[^ \t\n\\\\]"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
764 (regexp-quote comment-start)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
765 "\\(.+\\)$") end t))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
766 (modes . align-open-comment-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
767
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
768 (exc-c-comment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
769 (regexp . "/\\*\\(.+\\)\\*/")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
770 (repeat . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
771 (modes . align-c++-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
772
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
773 (exc-c-func-params
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
774 (regexp . "(\\([^)\n]+\\))")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
775 (repeat . t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
776 (modes . align-c++-modes))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
778 (exc-c-macro
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
779 (regexp . "^\\s-*#\\s-*\\(if\\w*\\|endif\\)\\(.*\\)$")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
780 (group . 2)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
781 (modes . align-c++-modes)))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
782 "A list describing text that should be excluded from alignment.
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
783 See the documentation for `align-rules-list' for more info."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
784 :type align-exclude-rules-list-type
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
785 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
786
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
787 (put 'align-exclude-rules-list 'risky-local-variable t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
788
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
789 ;;; Internal Variables:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
790
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
791 (defvar align-mode-rules-list nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
792 "Alignment rules specific to the current major mode.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
793 See the variable `align-rules-list' for more details.")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
794
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
795 (make-variable-buffer-local 'align-mode-rules-list)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
796
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
797 (defvar align-mode-exclude-rules-list nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
798 "Alignment exclusion rules specific to the current major mode.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
799 See the variable `align-exclude-rules-list' for more details.")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
800
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
801 (make-variable-buffer-local 'align-mode-exclude-rules-list)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
802
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
803 (defvar align-highlight-overlays nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
804 "The current overlays highlighting the text matched by a rule.")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
805
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
806 ;; Sample extension rule set, for vhdl-mode. This should properly be
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
807 ;; in vhdl-mode.el itself.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
808
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
809 (defcustom align-vhdl-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
810 `((vhdl-declaration
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
811 (regexp . "\\(signal\\|variable\\|constant\\)\\(\\s-+\\)\\S-")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
812 (group . 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
813
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 (vhdl-case
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
815 (regexp . "\\(others\\|[^ \t\n=<]\\)\\(\\s-*\\)=>\\(\\s-*\\)\\S-")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
816 (group . (2 3))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
817 (valid
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
818 . ,(function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
819 (lambda ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
820 (not (string= (downcase (match-string 1))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
821 "others"))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
822
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823 (vhdl-colon
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
824 (regexp . "[^ \t\n:]\\(\\s-*\\):\\(\\s-*\\)[^=\n]")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
825 (group . (1 2)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
826
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827 (direction
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828 (regexp . ":\\s-*\\(in\\|out\\|inout\\|buffer\\)\\(\\s-*\\)")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829 (group . 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
830
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
831 (sig-assign
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
832 (regexp . "[^ \t\n=<]\\(\\s-*\\)<=\\(\\s-*\\)\\S-")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
833 (group . (1 2)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
834
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
835 (var-assign
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
836 (regexp . "[^ \t\n:]\\(\\s-*\\):="))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
837
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
838 (use-entity
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
839 (regexp . "\\(\\s-+\\)use\\s-+entity")))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
840 "Alignment rules for `vhdl-mode'. See `align-rules-list' for more info."
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
841 :type align-rules-list-type
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
842 :group 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
843
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
844 (put 'align-vhdl-rules-list 'risky-local-variable t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
846 (defun align-set-vhdl-rules ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
847 "Setup the `align-mode-rules-list' variable for `vhdl-mode'."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
848 (setq align-mode-rules-list align-vhdl-rules-list))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
849
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
850 (add-hook 'vhdl-mode-hook 'align-set-vhdl-rules)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
851
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
852 (add-to-list 'align-dq-string-modes 'vhdl-mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
853 (add-to-list 'align-open-comment-modes 'vhdl-mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
854
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
855 ;;; User Functions:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
856
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
857 ;;;###autoload
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
858 (defun align (beg end &optional separate rules exclude-rules)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
859 "Attempt to align a region based on a set of alignment rules.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
860 BEG and END mark the region. If BEG and END are specifically set to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
861 nil (this can only be done programmatically), the beginning and end of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
862 the current alignment section will be calculated based on the location
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
863 of point, and the value of `align-region-separate' (or possibly each
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
864 rule's `separate' attribute).
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
865
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
866 If SEPARATE is non-nil, it overrides the value of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867 `align-region-separate' for all rules, except those that have their
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 `separate' attribute set.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
869
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
870 RULES and EXCLUDE-RULES, if either is non-nil, will replace the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
871 default rule lists defined in `align-rules-list' and
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
872 `align-exclude-rules-list'. See `align-rules-list' for more details
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
873 on the format of these lists."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
874 (interactive "r")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
875 (let ((separator
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
876 (or separate
31241
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 30890
diff changeset
877 (if (and (symbolp align-region-separate)
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 30890
diff changeset
878 (boundp align-region-separate))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
879 (symbol-value align-region-separate)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
880 align-region-separate)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
881 'entire)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
882 (if (not (or ;(eq separator 'largest)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
883 (and (functionp separator)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
884 (not (funcall separator nil nil)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
885 (align-region beg end separator
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
886 (or rules align-mode-rules-list align-rules-list)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887 (or exclude-rules align-mode-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
888 align-exclude-rules-list))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
889 (let ((sec-first end)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
890 (sec-last beg))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
891 (align-region beg end
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
892 (or exclude-rules
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
893 align-mode-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
894 align-exclude-rules-list) nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
895 separator
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
896 (function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
897 (lambda (b e mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
898 (when (and mode (listp mode))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
899 (setq sec-first (min sec-first b)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
900 sec-last (max sec-last e))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
901 (if (< sec-first sec-last)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
902 (align-region sec-first sec-last 'entire
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
903 (or rules align-mode-rules-list align-rules-list)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
904 (or exclude-rules align-mode-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
905 align-exclude-rules-list)))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
906
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
907 ;;;###autoload
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
908 (defun align-regexp (beg end regexp &optional group spacing repeat)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
909 "Align the current region using an ad-hoc rule read from the minibuffer.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
910 BEG and END mark the limits of the region. This function will prompt
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
911 for the REGEXP to align with. If no prefix arg was specified, you
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
912 only need to supply the characters to be lined up and any preceding
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
913 whitespace is replaced. If a prefix arg was specified, the full
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
914 regexp with parenthesized whitespace should be supplied; it will also
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
915 prompt for which parenthesis GROUP within REGEXP to modify, the amount
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
916 of SPACING to use, and whether or not to REPEAT the rule throughout
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
917 the line. See `align-rules-list' for more information about these
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
918 options.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
919
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
920 For example, let's say you had a list of phone numbers, and wanted to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
921 align them so that the opening parentheses would line up:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
922
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
923 Fred (123) 456-7890
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
924 Alice (123) 456-7890
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
925 Mary-Anne (123) 456-7890
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
926 Joe (123) 456-7890
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
927
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
928 There is no predefined rule to handle this, but you could easily do it
109695
215efa9f5db1 align.el: Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 106815
diff changeset
929 using a REGEXP like \"(\". All you would have to do is to mark the
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
930 region, call `align-regexp' and type in that regular expression."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
931 (interactive
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
932 (append
67480
b34c1d612bd4 (align-regexp, align-highlight-rule): Use region-beginning and region-end
Eli Zaretskii <eliz@gnu.org>
parents: 64818
diff changeset
933 (list (region-beginning) (region-end))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
934 (if current-prefix-arg
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
935 (list (read-string "Complex align using regexp: "
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
936 "\\(\\s-*\\)")
62402
a7e02ef1e3d6 Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents: 60505
diff changeset
937 (string-to-number
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
938 (read-string
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
939 "Parenthesis group to modify (justify if negative): " "1"))
62402
a7e02ef1e3d6 Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents: 60505
diff changeset
940 (string-to-number
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
941 (read-string "Amount of spacing (or column if negative): "
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
942 (number-to-string align-default-spacing)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
943 (y-or-n-p "Repeat throughout line? "))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
944 (list (concat "\\(\\s-*\\)"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
945 (read-string "Align regexp: "))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
946 1 align-default-spacing nil))))
109940
5f6bc820aec9 Minor align-regexp fix.
Glenn Morris <rgm@gnu.org>
parents: 109695
diff changeset
947 (or group (setq group 1))
5f6bc820aec9 Minor align-regexp fix.
Glenn Morris <rgm@gnu.org>
parents: 109695
diff changeset
948 (or spacing (setq spacing align-default-spacing))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
949 (let ((rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
950 (list (list nil (cons 'regexp regexp)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
951 (cons 'group (abs group))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
952 (if (< group 0)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
953 (cons 'justify t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
954 (cons 'bogus nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
955 (if (>= spacing 0)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
956 (cons 'spacing spacing)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
957 (cons 'column (abs spacing)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
958 (cons 'repeat repeat)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
959 (align-region beg end 'entire rule nil nil)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
960
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
961 ;;;###autoload
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
962 (defun align-entire (beg end &optional rules exclude-rules)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
963 "Align the selected region as if it were one alignment section.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
964 BEG and END mark the extent of the region. If RULES or EXCLUDE-RULES
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965 is set to a list of rules (see `align-rules-list'), it can be used to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966 override the default alignment rules that would have been used to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967 align that section."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968 (interactive "r")
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
969 (align beg end 'entire rules exclude-rules))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
971 ;;;###autoload
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
972 (defun align-current (&optional rules exclude-rules)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
973 "Call `align' on the current alignment section.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
974 This function assumes you want to align only the current section, and
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975 so saves you from having to specify the region. If RULES or
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
976 EXCLUDE-RULES is set to a list of rules (see `align-rules-list'), it
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
977 can be used to override the default alignment rules that would have
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
978 been used to align that section."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
979 (interactive)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
980 (align nil nil nil rules exclude-rules))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
981
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
982 ;;;###autoload
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
983 (defun align-highlight-rule (beg end title &optional rules exclude-rules)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
984 "Highlight the whitespace which a given rule would have modified.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
985 BEG and END mark the extent of the region. TITLE identifies the rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
986 that should be highlighted. If RULES or EXCLUDE-RULES is set to a
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
987 list of rules (see `align-rules-list'), it can be used to override the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988 default alignment rules that would have been used to identify the text
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989 to be colored."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
990 (interactive
67480
b34c1d612bd4 (align-regexp, align-highlight-rule): Use region-beginning and region-end
Eli Zaretskii <eliz@gnu.org>
parents: 64818
diff changeset
991 (list (region-beginning) (region-end)
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
992 (completing-read
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
993 "Title of rule to highlight: "
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
994 (mapcar
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
995 (function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996 (lambda (rule)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
997 (list (symbol-name (car rule)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
998 (append (or align-mode-rules-list align-rules-list)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
999 (or align-mode-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1000 align-exclude-rules-list))) nil t)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1001 (let ((ex-rule (assq (intern title)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1002 (or align-mode-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003 align-exclude-rules-list)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004 face)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005 (align-unhighlight-rule)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006 (align-region
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1007 beg end 'entire
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1008 (or rules (if ex-rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1009 (or exclude-rules align-mode-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010 align-exclude-rules-list)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1011 (or align-mode-rules-list align-rules-list)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1012 (unless ex-rule (or exclude-rules align-mode-exclude-rules-list
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1013 align-exclude-rules-list))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1014 (function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1015 (lambda (b e mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1016 (if (and mode (listp mode))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1017 (if (equal (symbol-name (car mode)) title)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018 (setq face (cons align-highlight-change-face
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019 align-highlight-nochange-face))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1020 (setq face nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1021 (when face
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1022 (let ((overlay (make-overlay b e)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1023 (setq align-highlight-overlays
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1024 (cons overlay align-highlight-overlays))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1025 (overlay-put overlay 'face
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1026 (if mode
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1027 (car face)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028 (cdr face)))))))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1029
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1030 ;;;###autoload
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1031 (defun align-unhighlight-rule ()
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1032 "Remove any highlighting that was added by `align-highlight-rule'."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 (interactive)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1034 (while align-highlight-overlays
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1035 (delete-overlay (car align-highlight-overlays))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036 (setq align-highlight-overlays
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1037 (cdr align-highlight-overlays))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038
30254
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1039 ;;;###autoload
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1040 (defun align-newline-and-indent ()
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1041 "A replacement function for `newline-and-indent', aligning as it goes."
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1042 (interactive)
31241
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 30890
diff changeset
1043 (let ((separate (or (if (and (symbolp align-region-separate)
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 30890
diff changeset
1044 (boundp align-region-separate))
30254
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1045 (symbol-value align-region-separate)
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1046 align-region-separate)
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1047 'entire))
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1048 (end (point)))
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1049 (call-interactively 'newline-and-indent)
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1050 (save-excursion
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1051 (forward-line -1)
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1052 (while (not (or (bobp)
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1053 (align-new-section-p (point) end separate)))
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1054 (forward-line -1))
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1055 (align (point) end))))
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1056
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1057 ;;; Internal Functions:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1058
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1059 (defun align-match-tex-pattern (regexp end &optional reverse)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1060 "Match REGEXP in TeX mode, counting backslashes appropriately.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1061 END denotes the end of the region to be searched, while REVERSE, if
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1062 non-nil, indicates that the search should proceed backward from the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1063 current position."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1064 (let (result)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1065 (while
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1066 (and (setq result
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1067 (funcall
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1068 (if reverse 're-search-backward
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1069 're-search-forward)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1070 (concat "\\(\\s-*\\)" regexp
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1071 "\\(\\s-*\\)") end t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1072 (let ((pos (match-end 1))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1073 (count 0))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1074 (while (and (> pos (point-min))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1075 (eq (char-before pos) ?\\))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1076 (setq count (1+ count) pos (1- pos)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1077 (eq (mod count 2) 1))
74617
92a7d7de57cb Fix rare bug in align.el
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 74616
diff changeset
1078 (goto-char (match-beginning (if reverse 1 2)))))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1079 result))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1080
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1081 (defun align-new-section-p (beg end separator)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1082 "Is there a section divider between BEG and END?
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1083 SEPARATOR specifies how to look for the section divider. See the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1084 documentation for `align-region-separate' for more details."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1085 (cond ((or (not separator)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1086 (eq separator 'entire))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1087 nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1088 ((eq separator 'group)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1089 (let ((amount 2))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1090 (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1091 (goto-char end)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1092 (if (bolp)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1093 (setq amount 1)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1094 (> (count-lines beg end) amount)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1095 ((stringp separator)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1096 (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1097 (goto-char beg)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1098 (re-search-forward separator end t)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1099 ((functionp separator)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1100 (funcall separator beg end))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1101 ((listp separator)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1102 (let ((seps separator) yes)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1103 (while seps
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1104 (if (and (>= (car seps) beg)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1105 (<= (car seps) end))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1106 (setq yes t seps nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1107 (setq seps (cdr seps))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1108 yes))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1109
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1110 (defun align-adjust-col-for-rule (column rule spacing tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1111 "Adjust COLUMN according to the given RULE.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1112 SPACING specifies how much spacing to use.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1113 TAB-STOP specifies whether SPACING refers to tab-stop boundaries."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1114 (unless spacing
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1115 (setq spacing align-default-spacing))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1116 (if (<= spacing 0)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1117 column
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1118 (if (not tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1119 (+ column spacing)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1120 (let ((stops tab-stop-list))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1121 (while stops
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1122 (if (and (> (car stops) column)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1123 (= (setq spacing (1- spacing)) 0))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1124 (setq column (car stops)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1125 stops nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1126 (setq stops (cdr stops)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1127 column)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1128
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1129 (defsubst align-column (pos)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1130 "Given a position in the buffer, state what column it's in.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1131 POS is the position whose column will be taken. Note that this
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1132 function will change the location of point."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1133 (goto-char pos)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1134 (current-column))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1135
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1136 (defsubst align-regions (regions props rule func)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1137 "Align the regions specified in REGIONS, a list of cons cells.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1138 PROPS describes formatting features specific to the given regions.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1139 RULE specifies exactly how to perform the alignments.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1140 If FUNC is specified, it will be called with each region that would
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1141 have been aligned, rather than modifying the text."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1142 (while regions
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1143 (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1144 (align-areas (car regions) (car props) rule func))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1145 (setq regions (cdr regions)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1146 props (cdr props))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1147
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1148 (defun align-areas (areas props rule func)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1149 "Given a list of AREAS and formatting PROPS, align according to RULE.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1150 AREAS should be a list of cons cells containing beginning and ending
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1151 markers. This function sweeps through all of the beginning markers,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1152 finds out which one starts in the furthermost column, and then deletes
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1153 and inserts text such that all of the ending markers occur in the same
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1154 column.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1155
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1156 If FUNC is non-nil, it will be called for each text region that would
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1157 have been aligned. No changes will be made to the buffer."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1158 (let* ((column (cdr (assq 'column rule)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1159 (fixed (if (symbolp column)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1160 (symbol-value column)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1161 column))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1162 (justify (cdr (assq 'justify rule)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1163 (col (or fixed 0))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1164 (width 0)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1165 ecol change look)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1166
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1167 ;; Determine the alignment column.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1168 (let ((a areas))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1169 (while a
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1170 (unless fixed
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1171 (setq col (max col (align-column (caar a)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1172 (unless change
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1173 (goto-char (cdar a))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1174 (if ecol
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
1175 (if (/= ecol (current-column))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1176 (setq change t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1177 (setq ecol (current-column))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1178 (when justify
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1179 (goto-char (caar a))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1180 (if (and (re-search-forward "\\s-*" (cdar a) t)
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
1181 (/= (point) (cdar a)))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1182 (let ((bcol (current-column)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1183 (setcdr (car a) (cons (point-marker) (cdar a)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1184 (goto-char (cdr (cdar a)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1185 (setq width (max width (- (current-column) bcol))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1186 (setq a (cdr a))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1187
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1188 (unless fixed
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1189 (setq col (+ (align-adjust-col-for-rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1190 col rule (car props) (cdr props)) width)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1191
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1192 ;; Make all ending positions to occur in the goal column. Since
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1193 ;; the whitespace to be modified was already deleted by
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1194 ;; `align-region', all we have to do here is indent.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1195
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1196 (unless change
29493
0345c6ffb8b4 Update from author.
Gerd Moellmann <gerd@gnu.org>
parents: 27327
diff changeset
1197 (setq change (and ecol (/= col ecol))))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1199 (when (or func change)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1200 (while areas
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1201 (let ((area (car areas))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1202 (gocol col) cur)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 (when area
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1204 (if func
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1205 (funcall func (car area) (cdr area) change)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1206 (if (not (and justify
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1207 (consp (cdr area))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1208 (goto-char (cdr area))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1209 (goto-char (cddr area))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1210 (let ((ecol (current-column)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1211 (goto-char (cadr area))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1212 (setq gocol (- col (- ecol (current-column))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1213 (setq cur (current-column))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1214 (cond ((< gocol 0) t) ; don't do anything
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1215 ((= cur gocol) t) ; don't need to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1216 ((< cur gocol) ; just add space
57972
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1217 ;; FIXME: It is stated above that "...the
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1218 ;; whitespace to be modified was already
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1219 ;; deleted by `align-region', all we have
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1220 ;; to do here is indent." However, this
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1221 ;; doesn't seem to be true, so we first
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1222 ;; delete the whitespace to avoid tabs
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1223 ;; after spaces.
fc790bd5db8f (align-areas): Delete whitespace before reindenting, so
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1224 (delete-horizontal-space t)
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1225 (indent-to gocol))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1226 (t
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1227 ;; This code works around an oddity in the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1228 ;; FORCE argument of `move-to-column', which
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1229 ;; tends to screw up markers if there is any
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1230 ;; tabbing.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1231 (let ((endcol (align-column
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1232 (if (and justify
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1233 (consp (cdr area)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1234 (cadr area)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1235 (cdr area))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1236 (abuts (<= gocol
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1237 (align-column (car area)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1238 (if abuts
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1239 (goto-char (car area))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1240 (move-to-column gocol t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1241 (let ((here (point)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1242 (move-to-column endcol t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1243 (delete-region here (point))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1244 (if abuts
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1245 (indent-to (align-adjust-col-for-rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1246 (current-column) rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1247 (car props) (cdr props)))))))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1248 (setq areas (cdr areas))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1249
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1250 (defun align-region (beg end separate rules exclude-rules
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1251 &optional func)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1252 "Align a region based on a given set of alignment rules.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1253 BEG and END specify the region to be aligned. Either may be nil, in
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1254 which case the range will stop at the nearest section division (see
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1255 `align-region-separate', and `align-region-heuristic' for more
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1256 information').
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1257
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1258 The region will be divided into separate alignment sections based on
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1259 the value of SEPARATE.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1260
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1261 RULES and EXCLUDE-RULES are a pair of lists describing how to align
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1262 the region, and which text areas within it should be excluded from
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1263 alignment. See the `align-rules-list' for more information on the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1264 required format of these two lists.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1265
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1266 If FUNC is specified, no text will be modified. What `align-region'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1267 will do with the rules is to search for the alignment areas, as it
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1268 regularly would, taking account for exclusions, and then call FUNC,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1269 first with the beginning and ending of the region to be aligned
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1270 according to that rule (this can be different for each rule, if BEG
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1271 and END were nil), and then with the beginning and ending of each
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1272 text region that the rule would have applied to.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1273
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1274 The signature of FUNC should thus be:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1275
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1276 (defun my-align-function (beg end mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1277 \"If MODE is a rule (a list), return t if BEG to END are to be searched.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1278 Otherwise BEG to END will be a region of text that matches the rule's
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1279 definition, and MODE will be non-nil if any changes are necessary.\"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1280 (unless (and mode (listp mode))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1281 (message \"Would have aligned from %d to %d...\" beg end)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1282
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1283 This feature (of passing a FUNC) is used internally to locate the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1284 position of exclusion areas, but could also be used for any other
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1285 purpose where you might want to know where the regions that the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1286 aligner would have dealt with are."
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1287 (let ((end-mark (and end (copy-marker end t)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1288 (real-beg beg)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1289 (real-end end)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1290 (report (and (not func) align-large-region beg end
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1291 (>= (- end beg) align-large-region)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1292 (rule-index 1)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1293 (rule-count (length rules)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1294 (if (and align-indent-before-aligning real-beg end-mark)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1295 (indent-region real-beg end-mark nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1296 (while rules
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1297 (let* ((rule (car rules))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1298 (run-if (assq 'run-if rule))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1299 (modes (assq 'modes rule)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1300 ;; unless the `run-if' form tells us not to, look for the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1301 ;; rule..
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1302 (unless (or (and modes (not (memq major-mode
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1303 (eval (cdr modes)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1304 (and run-if (not (funcall (cdr run-if)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1305 (let* ((current-case-fold case-fold-search)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1306 (case-fold (assq 'case-fold rule))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1307 (regexp (cdr (assq 'regexp rule)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1308 (regfunc (and (functionp regexp) regexp))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1309 (rulesep (assq 'separate rule))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1310 (thissep (if rulesep (cdr rulesep) separate))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1311 same (eol 0)
101449
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1312 search-start
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1313 group group-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1314 spacing spacing-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1315 tab-stop tab-stop-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1316 repeat repeat-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1317 valid valid-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1318 pos-list first
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1319 regions index
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1320 last-point b e
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1321 save-match-data
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1322 exclude-p
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1323 align-props)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1324 (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1325 ;; if beg and end were not given, figure out what the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1326 ;; current alignment region should be. Depending on the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1327 ;; value of `align-region-separate' it's possible for
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1328 ;; each rule to have its own definition of what that
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1329 ;; current alignment section is.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1330 (if real-beg
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1331 (goto-char beg)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1332 (if (or (not thissep) (eq thissep 'entire))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1333 (error "Cannot determine alignment region for '%s'"
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1334 (symbol-name (cdr (assq 'title rule)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1335 (beginning-of-line)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1336 (while (and (not (eobp))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1337 (looking-at "^\\s-*$"))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1338 (forward-line))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1339 (let* ((here (point))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1340 (start here))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1341 (while (and here
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1342 (let ((terminus
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1343 (and align-region-heuristic
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344 (- (point)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1345 align-region-heuristic))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1346 (if regfunc
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1347 (funcall regfunc terminus t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1348 (re-search-backward regexp
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1349 terminus t))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1350 (if (align-new-section-p (point) here thissep)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1351 (setq beg here
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1352 here nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1353 (setq here (point))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1354 (if (not here)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1355 (goto-char beg))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1356 (beginning-of-line)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1357 (setq beg (point))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1358 (goto-char start)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1359 (setq here (point))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1360 (while (and here
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1361 (let ((terminus
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1362 (and align-region-heuristic
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1363 (+ (point)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1364 align-region-heuristic))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1365 (if regfunc
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1366 (funcall regfunc terminus nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1367 (re-search-forward regexp terminus t))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1368 (if (align-new-section-p here (point) thissep)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1369 (setq end here
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1370 here nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371 (setq here (point))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372 (if (not here)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1373 (goto-char end))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1374 (forward-line)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1375 (setq end (point)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1376 end-mark (copy-marker end t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1377 (goto-char beg)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1378
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379 ;; If we have a region to align, and `func' is set and
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1380 ;; reports back that the region is ok, then align it.
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1381 (when (or (not func)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382 (funcall func beg end rule))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1383 (unwind-protect
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1384 (let (exclude-areas)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1385 ;; determine first of all where the exclusions
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1386 ;; lie in this region
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1387 (when exclude-rules
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1388 ;; guard against a problem with recursion and
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1389 ;; dynamic binding vs. lexical binding, since
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1390 ;; the call to `align-region' below will
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1391 ;; re-enter this function, and rebind
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1392 ;; `exclude-areas'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1393 (set (setq exclude-areas
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1394 (make-symbol "align-exclude-areas"))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1395 nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1396 (align-region
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1397 beg end 'entire
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1398 exclude-rules nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1399 `(lambda (b e mode)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 (or (and mode (listp mode))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1401 (set (quote ,exclude-areas)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1402 (cons (cons b e)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1403 ,exclude-areas)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1404 (setq exclude-areas
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1405 (sort (symbol-value exclude-areas)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1406 (function
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1407 (lambda (l r)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1408 (>= (car l) (car r)))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1409
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1410 ;; set `case-fold-search' according to the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1411 ;; (optional) `case-fold' property
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1412 (and case-fold
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1413 (setq case-fold-search (cdr case-fold)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1414
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1415 ;; while we can find the rule in the alignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1416 ;; region..
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1417 (while (and (< (point) end-mark)
101449
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1418 (setq search-start (point))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1419 (if regfunc
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1420 (funcall regfunc end-mark nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1421 (re-search-forward regexp
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1422 end-mark t)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1423
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1424 ;; give the user some indication of where we
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1425 ;; are, if it's a very large region being
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1426 ;; aligned
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1427 (if report
45029
18577b549577 (align-region): Fix call to `message'.
Richard M. Stallman <rms@gnu.org>
parents: 43115
diff changeset
1428 (let ((symbol (car rule)))
18577b549577 (align-region): Fix call to `message'.
Richard M. Stallman <rms@gnu.org>
parents: 43115
diff changeset
1429 (if (and symbol (symbolp symbol))
30254
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1430 (message
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1431 "Aligning `%s' (rule %d of %d) %d%%..."
45052
8357077d84d7 (align-region): Fixed the fix to align-region, because the "name"
John Wiegley <johnw@newartisans.com>
parents: 45029
diff changeset
1432 (symbol-name symbol) rule-index rule-count
30254
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1433 (/ (* (- (point) real-beg) 100)
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1434 (- end-mark real-beg)))
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1435 (message
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1436 "Aligning %d%%..."
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1437 (/ (* (- (point) real-beg) 100)
857a458d569d Added a new feature to align.el
John Wiegley <johnw@newartisans.com>
parents: 29493
diff changeset
1438 (- end-mark real-beg))))))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1439
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1440 ;; if the search ended us on the beginning of
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1441 ;; the next line, move back to the end of the
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1442 ;; previous line.
101449
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1443 (if (and (bolp) (> (point) search-start))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1444 (forward-char -1))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1445
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1446 ;; lookup the `group' attribute the first time
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1447 ;; that we need it
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1448 (unless group-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1449 (setq group (or (cdr (assq 'group rule)) 1))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1450 (if (listp group)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1451 (setq first (car group))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1452 (setq first group group (list group)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1453 (setq group-c t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1454
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1455 (unless spacing-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1456 (setq spacing (cdr (assq 'spacing rule))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1457 spacing-c t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1458
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1459 (unless tab-stop-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1460 (setq tab-stop
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1461 (let ((rule-ts (assq 'tab-stop rule)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1462 (if rule-ts
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1463 (cdr rule-ts)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1464 (if (symbolp align-to-tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1465 (symbol-value align-to-tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1466 align-to-tab-stop)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1467 tab-stop-c t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1468
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1469 ;; test whether we have found a match on the same
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1470 ;; line as a previous match
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1471 (if (> (point) eol)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1472 (setq same nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1473 eol (save-excursion
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1474 (end-of-line)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1475 (point-marker))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1476
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1477 ;; lookup the `repeat' attribute the first time
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1478 (or repeat-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1479 (setq repeat (cdr (assq 'repeat rule))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1480 repeat-c t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1481
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1482 ;; lookup the `valid' attribute the first time
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1483 (or valid-c
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1484 (setq valid (assq 'valid rule)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1485 valid-c t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1486
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1487 ;; remember the beginning position of this rule
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1488 ;; match, and save the match-data, since either
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1489 ;; the `valid' form, or the code that searches for
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1490 ;; section separation, might alter it
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1491 (setq b (match-beginning first)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1492 save-match-data (match-data))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1493
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1494 ;; unless the `valid' attribute is set, and tells
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1495 ;; us that the rule is not valid at this point in
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1496 ;; the code..
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1497 (unless (and valid (not (funcall (cdr valid))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1498
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1499 ;; look to see if this match begins a new
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1500 ;; section. If so, we should align what we've
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1501 ;; collected so far, and then begin collecting
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1502 ;; anew for the next alignment section
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1503 (if (and last-point
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1504 (align-new-section-p last-point b
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1505 thissep))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1506 (progn
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1507 (align-regions regions align-props
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1508 rule func)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1509 (setq last-point (copy-marker b t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1510 regions nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1511 align-props nil))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1512 (setq last-point (copy-marker b t)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1513
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1514 ;; restore the match data
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1515 (set-match-data save-match-data)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1516
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1517 ;; check whether the region to be aligned
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1518 ;; straddles an exclusion area
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1519 (let ((excls exclude-areas))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1520 (setq exclude-p nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1521 (while excls
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1522 (if (and (< (match-beginning (car group))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1523 (cdar excls))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1524 (> (match-end (car (last group)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1525 (caar excls)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1526 (setq exclude-p t
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1527 excls nil)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1528 (setq excls (cdr excls)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1529
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1530 ;; go through the list of parenthesis groups
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1531 ;; matching whitespace text to be
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1532 ;; contracted/expanded (or possibly
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1533 ;; justified, if the `justify' attribute was
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1534 ;; set)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1535 (unless exclude-p
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1536 (let ((g group))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1537 (while g
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1538
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1539 ;; we have to use markers, since
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1540 ;; `align-areas' may modify the buffer
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1541 (setq b (copy-marker
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1542 (match-beginning (car g)) t)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1543 e (copy-marker (match-end (car g)) t))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1544
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1545 ;; record this text region for alignment
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1546 (setq index (if same (1+ index) 0))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1547 (let ((region (cons b e))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1548 (props (cons
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1549 (if (listp spacing)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1550 (car spacing)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1551 spacing)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1552 (if (listp tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1553 (car tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1554 tab-stop))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1555 (if (nth index regions)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1556 (setcar (nthcdr index regions)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1557 (cons region
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1558 (nth index regions)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1559 (if regions
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1560 (progn
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1561 (nconc regions
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1562 (list (list region)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1563 (nconc align-props (list props)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1564 (setq regions
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1565 (list (list region)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1566 (setq align-props (list props)))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1567
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1568 ;; if any further rule matches are
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1569 ;; found before `eol', then they are
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1570 ;; on the same line as this one; this
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1571 ;; can only happen if the `repeat'
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1572 ;; attribute is non-nil
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1573 (if (listp spacing)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1574 (setq spacing (cdr spacing)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1575 (if (listp tab-stop)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1576 (setq tab-stop (cdr tab-stop)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1577 (setq same t g (cdr g))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1578
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1579 ;; if `repeat' has not been set, move to
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1580 ;; the next line; don't bother searching
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1581 ;; anymore on this one
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1582 (if (and (not repeat) (not (bolp)))
101449
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1583 (forward-line))
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1584
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1585 ;; if the search did not change point,
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1586 ;; move forward to avoid an infinite loop
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1587 (if (= (point) search-start)
577a3b5b05f5 (align-region): Avoid infloop.
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
1588 (forward-char)))))
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1589
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1590 ;; when they are no more matches for this rule,
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1591 ;; align whatever was left over
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1592 (if regions
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1593 (align-regions regions align-props rule func)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1594
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1595 (setq case-fold-search current-case-fold)))))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1596 (setq rules (cdr rules)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1597 rule-index (1+ rule-index)))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1598
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1599 (if report
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1600 (message "Aligning...done"))))
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1601
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1602 ;; Provide:
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1603
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1604 (provide 'align)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1605
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1606 (run-hooks 'align-load-hook)
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1607
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
1608 ;; arch-tag: ef79cccf-1db8-4888-a8a1-d7ce2d1532f7
27327
c7597f93c50d *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1609 ;;; align.el ends here