annotate lisp/hm--html-menus/hm--html-indentation.el @ 172:a38aed19690b

Added tag r20-3b12 for changeset 929b76928fce
author cvs
date Mon, 13 Aug 2007 09:47:55 +0200
parents 25f70ba0133c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
1 ;;; hm--html-indentation.el
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
2 ;;; v1.00; 9-Feb-1997
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
3 ;;; Copyright (C) 1997 Heiko Muenkel
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
4 ;;; email: muenkel@tnt.uni-hannover.de
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
5 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
6 ;;; This program is free software; you can redistribute it and/or modify
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
7 ;;; it under the terms of the GNU General Public License as published by
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
8 ;;; the Free Software Foundation; either version 1, or (at your option)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
9 ;;; any later version.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
10 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
11 ;;; This program is distributed in the hope that it will be useful,
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
12 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
14 ;;; GNU General Public License for more details.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
15 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
16 ;;; You should have received a copy of the GNU General Public License
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
17 ;;; along with this program; if not, write to the Free Software
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
18 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
19 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
20 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
21 ;;; Description:
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
22 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
23 ;;; Defines functions for the indentation.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
24 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
25 ;;; Installation:
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
26 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
27 ;;; Put this file in one of your load path directories.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
28 ;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
29
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
30 (defun hm--html-point-between-strings-p (string-1
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
31 string-2
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
32 &optional boundary)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
33 "Returns non nil, if the current point is between STRING-1 and STRING-2."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
34 (when (and (re-search-backward (concat "\\("
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
35 (regexp-quote string-1)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
36 "\\)\\|\\("
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
37 (regexp-quote string-2)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
38 "\\)")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
39 boundary
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
40 t)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
41 (match-string 1))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
42 (point)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
43
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
44 (defun hm--html-in-comment-p ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
45 "Checks if the current point is in a comment block.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
46 If this is the case, then the start point of the comment is returned.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
47 Otherwise nil is returned."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
48 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
49 (hm--html-point-between-strings-p comment-start comment-end)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
50
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
51 (defun hm--html-previous-line-start ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
52 "Returns the start of the previous non blank line."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
53 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
54 (beginning-of-line)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
55 (skip-chars-backward " \t\n")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
56 (beginning-of-line)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
57 (point)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
58
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
59 (defun hm--html-look-at-comment-end-p ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
60 "T, if the current line starts with the comment end."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
61 (looking-at (regexp-quote comment-end)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
62
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
63 (defun hm--html-column-of-previous-regexp (regexp)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
64 "Returns the column of the start of the previous REGEXP.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
65 It searches backward until the REGEXP is found. If no
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
66 REGEXP is found, then it returns 0."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
67 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
68 (if (re-search-backward regexp nil t)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
69 (current-column)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
70 0)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
71
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
72 (defun hm--html-look-at-end-tag-p ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
73 "Returns the end tag name if the point is at the start of an end tag.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
74 nil is returned otherwise."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
75 (when (looking-at "\\(<[ \t\n]*/[ \t\n]*\\)\\([^ \t\n>]+\\)")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
76 (match-string 2)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
77
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
78
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
79 (defun hm--html-previous-line-indentation ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
80 "Returns the indentation of the previous non blank line."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
81 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
82 (beginning-of-line)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
83 (skip-chars-backward " \t\n")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
84 (back-to-indentation)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
85 (current-column)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
86
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
87 (defun hm--html-in-tag-p ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
88 "Checks if the current point is in a tag.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
89 If this is the case, then the start point of the tag is returned.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
90 Otherwise nil is returned."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
91 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
92 (let ((start (re-search-backward "\\(<\\)\\|\\(>\\)" nil t)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
93 (when (match-string 1)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
94 start))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
95
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
96 (defun hm--html-return-beginning-of-line ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
97 "Returns the beginning of the current line."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
98 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
99 (beginning-of-line)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
100 (point)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
101
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
102 (defun hm--html-return-end-of-line ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
103 "Returns the end of the current line."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
104 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
105 (end-of-line)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
106 (point)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
107
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
108 (defun hm--html-paramter-column-in-line-after-point (point)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
109 "Returns the column where the second non blank text after POINT starts.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
110 This point must be in the line with POINT otherwise it returns nil."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
111 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
112 (goto-char point)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
113 (when (re-search-forward "<[ \t]*[^ \t]+[ \t]"
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
114 (hm--html-return-end-of-line)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
115 t)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
116 (when (looking-at "[^\n]")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
117 (current-column)))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
118
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
119 (defun hm--html-column-of-point (point)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
120 "Returns the column of the POINT."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
121 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
122 (goto-char point)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
123 (current-column)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
124
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
125 (defun hm--html-search-previous-tag-in-current-line ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
126 "Searches tags from the `(point)' to the beginning of the line.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
127 It returns nil, if there is no tag and the tag name, if there is
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
128 a tag. The tag name contains a leading /, if it is an end tag."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
129 (when (re-search-backward ">" (hm--html-return-beginning-of-line) t)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
130 (when (re-search-backward
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
131 "\\(<[ \t\n]*\\(/?\\)\\([ \t\n]*[^> \t\n]+\\)[^>]*\\)"
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
132 nil
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
133 t)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
134 (concat (match-string 2) (match-string 3)))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
135
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
136 (defun hm--html-search-start-tag (tag-name until)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
137 "Searches start tag backwards from the current point until the point UNTIL.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
138 The name of the tag is TAG-NAME. After this function the point is at UNTIL
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
139 (then it returns nil) or at the start of the tag, then it returns t."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
140 (if (re-search-backward (concat "\\(<[ \t\n]*\\)\\(/?\\)\\("
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
141 tag-name
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
142 "\\)\\([^>]*>\\)") until t)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
143 (if (string= "/" (match-string 2))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
144 (progn
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
145 (hm--html-search-start-tag tag-name until)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
146 (hm--html-search-start-tag tag-name until))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
147 t)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
148 (goto-char until)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
149 nil))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
150
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
151 (defun hm--html-is-one-element-tag-p (tag-name)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
152 "Returns t, if the tag with the tag-name is a one element tag."
153
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
153 (assoc ':hm--html-one-element-tag
24
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents: 22
diff changeset
154 (cdr (assoc* (downcase tag-name)
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents: 22
diff changeset
155 hm--html-tag-name-alist
4103f0995bd7 Import from CVS: tag r19-15b95
cvs
parents: 22
diff changeset
156 :test 'string=))))
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
157
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
158 (defun hm--html-calculate-indent-according-to-previous-tags ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
159 "Calculate the indent according to the previous tags in this line.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
160 If no tags are found, then nil is returned."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
161 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
162 (let ((tag (hm--html-search-previous-tag-in-current-line)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
163 (cond ((not tag) nil)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
164
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
165 ((eq ?/ (elt tag 0)) ; end tag found
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
166 (if (hm--html-search-start-tag
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
167 (substring tag 1)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
168 (point-min))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
169 (or (hm--html-calculate-indent-according-to-previous-tags)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
170 (progn
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
171 (backward-to-indentation 0)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
172 (current-column)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
173 0)) ; it may be that the current indentation is better here
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
174
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
175 ((hm--html-is-one-element-tag-p tag) ; one element tag
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
176 (or (hm--html-calculate-indent-according-to-previous-tags)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
177 (progn
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
178 (backward-to-indentation 0)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
179 (current-column))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
180
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
181 (t ; start tag found
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
182 (+ (current-column) hm--html-inter-tag-indent))))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
183
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
184
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
185 (defun hm--html-calculate-indent ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
186 "Calculate the indentation of the current line."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
187 (let ((match-point)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
188 (tag))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
189 (save-excursion
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
190 (beginning-of-line)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
191 (back-to-indentation)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
192 (cond ((eq (count-lines (point-min) (point)) 0) 0) ; Filestart
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
193
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
194 ((setq match-point (hm--html-in-comment-p)) ; in a comment
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
195 (if (>= match-point (hm--html-previous-line-start)) ; 1. line
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
196 (if (hm--html-look-at-comment-end-p)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
197 (hm--html-column-of-previous-regexp
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
198 (regexp-quote comment-start))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
199 (+ (hm--html-column-of-previous-regexp
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
200 (regexp-quote comment-start))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
201 hm--html-comment-indent))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
202 (if (hm--html-look-at-comment-end-p)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
203 (- (hm--html-previous-line-indentation)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
204 hm--html-comment-indent)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
205 (hm--html-previous-line-indentation))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
206
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
207 ((setq tag (hm--html-look-at-end-tag-p)) ; look at end tag
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
208 (hm--html-search-start-tag tag (point-min))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
209 (current-column))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
210
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
211 ((looking-at ">")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
212 (hm--html-column-of-previous-regexp "<"))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
213
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
214 ((setq match-point (hm--html-in-tag-p))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
215 (if (>= match-point (hm--html-previous-line-start)) ; 1. line
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
216 (or (hm--html-paramter-column-in-line-after-point match-point)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
217 (+ (hm--html-column-of-point match-point)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
218 hm--html-intra-tag-indent))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
219 (hm--html-previous-line-indentation)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
220
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
221 (t (or (save-excursion ; check previous line
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
222 (skip-chars-backward " \t\n")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
223 (hm--html-calculate-indent-according-to-previous-tags))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
224 (hm--html-previous-line-indentation)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
225 ))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
226
153
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
227
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
228 ;;; Indentation commands
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
229
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
230 (defun hm--html-indent-line ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
231 "Indent the current line line."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
232 (interactive)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
233 (unless hm--html-disable-indentation
153
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
234 (let ((pos (- (point-max) (point))))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
235 (indent-line-to (max 0 (hm--html-calculate-indent)))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
236 (when (> (- (point-max) pos) (point))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
237 (goto-char (- (point-max) pos))))))
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
238
153
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
239 ;(defun hm--html-indent-region (begin end)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
240 ; "Indents the region between BEGIN and END according to the major mode."
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
241 ; (interactive "d\nm")
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
242 ; (when (< end begin)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
243 ; (let ((a end))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
244 ; (setq end begin)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
245 ; (setq begin a)))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
246 ; (save-excursion
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
247 ; (goto-char begin)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
248 ; (let ((old-point))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
249 ; (while (and (<= (point) end)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
250 ; (not (eq (point) old-point)))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
251 ; (setq old-point (point))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
252 ; (indent-according-to-mode)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
253 ; (forward-line)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
254 ; ))))
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
255
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
256 (defun hm--html-indent-region (begin end)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
257 "Indents the region between BEGIN and END according to the major mode."
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
258 (interactive "d\nm")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
259 (when (< end begin)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
260 (let ((a end))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
261 (setq end begin)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
262 (setq begin a)))
153
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
263 (let ((lines (count-lines begin end)))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
264 (save-excursion
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
265 (goto-char begin)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
266 (loop repeat lines
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
267 do (indent-according-to-mode)
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
268 (forward-line))))
25f70ba0133c Import from CVS: tag r20-3b3
cvs
parents: 24
diff changeset
269 )
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
270
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
271 (provide 'hm--html-indentation)