38422
|
1 ;;; reftex-index.el --- index support with RefTeX
|
74509
|
2
|
|
3 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
106815
|
4 ;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
27035
|
5
|
46612
|
6 ;; Author: Carsten Dominik <dominik@science.uva.nl>
|
76672
|
7 ;; Maintainer: auctex-devel@gnu.org
|
69094
|
8 ;; Version: 4.31
|
27035
|
9
|
|
10 ;; This file is part of GNU Emacs.
|
|
11
|
94670
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
|
27035
|
13 ;; it under the terms of the GNU General Public License as published by
|
94670
|
14 ;; the Free Software Foundation, either version 3 of the License, or
|
|
15 ;; (at your option) any later version.
|
27035
|
16
|
|
17 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
20 ;; GNU General Public License for more details.
|
|
21
|
|
22 ;; You should have received a copy of the GNU General Public License
|
94670
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
25280
|
24
|
38422
|
25 ;;; Commentary:
|
|
26
|
|
27 ;;; Code:
|
|
28
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
29 (eval-when-compile (require 'cl))
|
25280
|
30 (provide 'reftex-index)
|
|
31 (require 'reftex)
|
|
32 ;;;
|
|
33
|
47050
|
34 ;; START remove for XEmacs release
|
25280
|
35 (defvar mark-active)
|
25802
|
36 (defvar transient-mark-mode)
|
65548
|
37 (defvar TeX-master)
|
47050
|
38 ;; END remove for XEmacs release
|
86851
|
39
|
|
40 (declare-function texmathp "ext:texmathp" ())
|
|
41
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
42 (defun reftex-index-selection-or-word (&optional arg phrase)
|
25280
|
43 "Put selection or the word near point into the default index macro.
|
|
44 This uses the information in `reftex-index-default-macro' to make an index
|
|
45 entry. The phrase indexed is the current selection or the word near point.
|
|
46 When called with one `C-u' prefix, let the user have a chance to edit the
|
|
47 index entry. When called with 2 `C-u' as prefix, also ask for the index
|
|
48 macro and other stuff.
|
|
49 When called inside TeX math mode as determined by the `texmathp.el' library
|
|
50 which is part of AUCTeX, the string is first processed with the
|
|
51 `reftex-index-math-format', which see."
|
|
52 (interactive "P")
|
|
53 (let* ((use-default (not (equal arg '(16)))) ; check for double prefix
|
52170
|
54 ;; check if we have an active selection
|
85777
|
55 (active (if (featurep 'xemacs)
|
52170
|
56 (and zmacs-regions (region-exists-p)) ; XEmacs
|
|
57 (and transient-mark-mode mark-active))) ; Emacs
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
58 (beg (if active
|
52170
|
59 (region-beginning)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
60 (save-excursion
|
52170
|
61 (skip-syntax-backward "w\\") (point))))
|
|
62 (end (if active
|
|
63 (region-end)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
64 (save-excursion
|
52170
|
65 (skip-syntax-forward "w\\") (point))))
|
|
66 (sel (buffer-substring beg end))
|
|
67 (mathp (condition-case nil (texmathp) (error nil)))
|
|
68 (current-prefix-arg nil) ; we want to call reftex-index without prefix.
|
|
69 key def-char def-tag full-entry)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
70
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
71 (if phrase
|
52170
|
72 (progn
|
|
73 (reftex-index-visit-phrases-buffer)
|
|
74 (reftex-index-new-phrase sel))
|
25280
|
75
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
76 (if (equal sel "")
|
52170
|
77 ;; Nothing selected, no word, so use full reftex-index command
|
|
78 (reftex-index)
|
|
79 ;; OK, we have something to index here.
|
|
80 ;; Add the dollars when necessary
|
|
81 (setq key (if mathp
|
|
82 (format reftex-index-math-format sel)
|
|
83 sel))
|
|
84 ;; Get info from `reftex-index-default-macro'
|
|
85 (setq def-char (if use-default (car reftex-index-default-macro)))
|
|
86 (setq def-tag (if use-default (nth 1 reftex-index-default-macro)))
|
|
87 ;; Does the user want to edit the entry?
|
|
88 (setq full-entry (if arg
|
|
89 (reftex-index-complete-key
|
|
90 def-tag nil (cons key 0))
|
|
91 key))
|
|
92 ;; Delete what is in the buffer and make the index entry
|
|
93 (delete-region beg end)
|
|
94 (reftex-index def-char full-entry def-tag sel)))))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
95
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
96 (defun reftex-index (&optional char key tag sel no-insert)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
97 "Query for an index macro and insert it along with its arguments.
|
25280
|
98 The index macros available are those defined in `reftex-index-macro' or
|
|
99 by a call to `reftex-add-index-macros', typically from an AUCTeX style file.
|
|
100 RefteX provides completion for the index tag and the index key, and
|
|
101 will prompt for other arguments."
|
|
102
|
|
103 (interactive)
|
|
104
|
|
105 ;; Ensure access to scanning info
|
|
106 (reftex-ensure-index-support t)
|
|
107 (reftex-access-scan-info current-prefix-arg)
|
|
108
|
|
109 ;; Find out which macro we are going to use
|
|
110 (let* ((char (or char
|
52170
|
111 (reftex-select-with-char reftex-query-index-macro-prompt
|
|
112 reftex-query-index-macro-help)))
|
|
113 (macro (nth 1 (assoc char reftex-key-to-index-macro-alist)))
|
|
114 (entry (or (assoc macro reftex-index-macro-alist)
|
|
115 (error "No index macro associated with %c" char)))
|
|
116 (ntag (nth 1 entry))
|
|
117 (tag (or tag (nth 1 entry)))
|
|
118 (nargs (nth 4 entry))
|
|
119 (nindex (nth 5 entry))
|
|
120 (opt-args (nth 6 entry))
|
|
121 (repeat (nth 7 entry))
|
|
122 opt tag1 value)
|
25280
|
123
|
|
124 ;; Get the supported arguments
|
|
125 (if (stringp tag)
|
52170
|
126 (setq tag1 tag)
|
25280
|
127 (setq tag1 (or (reftex-index-complete-tag tag opt-args) "")))
|
|
128 (setq key (or key
|
52170
|
129 (reftex-index-complete-key
|
|
130 (if (string= tag1 "") "idx" tag1)
|
|
131 (member nindex opt-args))))
|
25280
|
132
|
|
133 ;; Insert the macro and ask for any additional args
|
|
134 (insert macro)
|
|
135 (loop for i from 1 to nargs do
|
|
136 (setq opt (member i opt-args)
|
52170
|
137 value (cond ((= nindex i) key)
|
|
138 ((equal ntag i) tag1)
|
|
139 (t (read-string (concat "Macro arg nr. "
|
|
140 (int-to-string i)
|
|
141 (if opt " (optional)" "")
|
|
142 ": ")))))
|
25280
|
143 (unless (and opt (string= value ""))
|
52170
|
144 (insert (if opt "[" "{") value (if opt "]" "}"))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
145 (and repeat (stringp sel) (insert sel))
|
25280
|
146 (and key reftex-plug-into-AUCTeX (fboundp 'LaTeX-add-index-entries)
|
52170
|
147 (LaTeX-add-index-entries key))
|
25280
|
148 (reftex-index-update-taglist tag1)
|
|
149 (reftex-notice-new)))
|
|
150
|
|
151 (defun reftex-default-index ()
|
|
152 (cond ((null reftex-index-default-tag) nil)
|
52170
|
153 ((stringp reftex-index-default-tag) reftex-index-default-tag)
|
|
154 (t (or (get reftex-docstruct-symbol 'default-index-tag)
|
|
155 "idx"))))
|
25280
|
156
|
|
157 (defun reftex-update-default-index (tag &optional tag-list)
|
|
158 (if (and (not (equal tag ""))
|
52170
|
159 (stringp tag)
|
|
160 (eq reftex-index-default-tag 'last)
|
|
161 (or (null tag-list)
|
|
162 (member tag tag-list)))
|
25280
|
163 (put reftex-docstruct-symbol 'default-index-tag tag)))
|
|
164
|
|
165 (defun reftex-index-complete-tag (&optional itag opt-args)
|
|
166 ;; Ask the user for a tag, completing on known tags.
|
|
167 ;; ITAG is the argument number which contains the tag.
|
|
168 ;; OPT-ARGS is a list of optional argument indices, as given by
|
|
169 ;; `reftex-parse-args'.
|
|
170 (let* ((opt (and (integerp itag) (member itag opt-args)))
|
65680
|
171 (index-tags (cdr (assq 'index-tags
|
|
172 (symbol-value reftex-docstruct-symbol))))
|
|
173 (default (reftex-default-index))
|
|
174 (prompt (concat "Index tag"
|
|
175 (if (or opt default)
|
|
176 (format " (%s): "
|
|
177 (concat
|
|
178 (if opt "optional" "")
|
|
179 (if default
|
|
180 (concat (if opt ", " "")
|
|
181 (format "default %s" default))
|
|
182 "")))
|
|
183 ": ")))
|
|
184 (tag (completing-read prompt (mapcar 'list index-tags))))
|
25280
|
185 (if (and default (equal tag "")) (setq tag default))
|
|
186 (reftex-update-default-index tag)
|
|
187 tag))
|
|
188
|
|
189 (defun reftex-index-select-tag ()
|
|
190 ;; Have the user select an index tag.
|
|
191 ;; FIXME: should we cache tag-alist, prompt and help?
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
192 (let* ((index-tags (cdr (assoc 'index-tags
|
52170
|
193 (symbol-value reftex-docstruct-symbol))))
|
|
194 (default (reftex-default-index)))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
195 (cond
|
25280
|
196 ((null index-tags)
|
|
197 (error "No index tags available"))
|
|
198
|
|
199 ((= (length index-tags) 1)
|
|
200 ;; Just one index, use it
|
|
201 (car index-tags))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
202
|
25280
|
203 ((> (length index-tags) 1)
|
|
204 ;; Several indices, ask.
|
|
205 (let* ((tags (copy-sequence index-tags))
|
52170
|
206 (cnt 0)
|
|
207 tag-alist i val len tag prompt help rpl)
|
|
208 ;; Move idx and glo up in the list to ensure ?i and ?g shortcuts
|
|
209 (if (member "glo" tags)
|
|
210 (setq tags (cons "glo" (delete "glo" tags))))
|
|
211 (if (member "idx" tags)
|
|
212 (setq tags (cons "idx" (delete "idx" tags))))
|
|
213 ;; Find unique shortcuts for each index.
|
|
214 (while (setq tag (pop tags))
|
|
215 (setq len (length tag)
|
|
216 i -1
|
|
217 val nil)
|
|
218 (catch 'exit
|
|
219 (while (and (< (incf i) len) (null val))
|
|
220 (unless (assq (aref tag i) tag-alist)
|
|
221 (push (list (aref tag i)
|
|
222 tag
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
223 (concat (substring tag 0 i)
|
52170
|
224 "[" (substring tag i (incf i)) "]"
|
|
225 (substring tag i)))
|
|
226 tag-alist)
|
|
227 (throw 'exit t)))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
228 (push (list (+ ?0 (incf cnt)) tag
|
52170
|
229 (concat "[" (int-to-string cnt) "]:" tag))
|
|
230 tag-alist)))
|
|
231 (setq tag-alist (nreverse tag-alist))
|
|
232 ;; Compute Prompt and Help strings
|
|
233 (setq prompt
|
|
234 (concat
|
|
235 (format "Select Index%s: "
|
|
236 (if default (format " (Default <%s>)" default) ""))
|
|
237 (mapconcat (lambda(x) (nth 2 x)) tag-alist " ")))
|
|
238 (setq help
|
|
239 (concat "Select an Index\n===============\n"
|
|
240 (if default
|
|
241 (format "[^M] %s (the default)\n" default)
|
|
242 "")
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
243 (mapconcat (lambda(x)
|
52170
|
244 (apply 'format "[%c] %s" x))
|
|
245 tag-alist "\n")))
|
|
246 ;; Query the user for an index-tag
|
|
247 (setq rpl (reftex-select-with-char prompt help 3 t))
|
|
248 (message "")
|
|
249 (if (and default (equal rpl ?\C-m))
|
|
250 default
|
|
251 (if (assq rpl tag-alist)
|
|
252 (progn
|
|
253 (reftex-update-default-index (nth 1 (assq rpl tag-alist)))
|
|
254 (nth 1 (assq rpl tag-alist)))
|
|
255 (error "No index tag associated with %c" rpl)))))
|
25280
|
256 (t (error "This should not happen (reftex-index-select-tag)")))))
|
|
257
|
|
258 (defun reftex-index-complete-key (&optional tag optional initial)
|
|
259 ;; Read an index key, with completion.
|
|
260 ;; Restrict completion table on index tag TAG.
|
|
261 ;; OPTIONAL indicates if the arg is optional.
|
|
262 (let* ((table (reftex-sublist-nth
|
52170
|
263 (symbol-value reftex-docstruct-symbol) 6
|
|
264 (lambda(x) (and (eq (car x) 'index)
|
|
265 (string= (nth 1 x) (or tag ""))))
|
|
266 t))
|
|
267 (prompt (concat "Index key" (if optional " (optional)" "") ": "))
|
|
268 (key (completing-read prompt table nil nil initial)))
|
25280
|
269 key))
|
|
270
|
|
271 (defun reftex-index-update-taglist (newtag)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
272 ;; add NEWTAG to the list of available index tags.
|
25280
|
273 (let ((cell (assoc 'index-tags (symbol-value reftex-docstruct-symbol))))
|
|
274 (and newtag (cdr cell) (not (member newtag (cdr cell)))
|
52170
|
275 (push newtag (cdr cell)))))
|
25280
|
276
|
|
277 (defvar reftex-index-map (make-sparse-keymap)
|
|
278 "Keymap used for *Index* buffers.")
|
|
279
|
|
280 (defvar reftex-index-menu)
|
|
281
|
|
282 (defvar reftex-last-index-file nil
|
|
283 "Stores the file name from which `reftex-display-index' was called.")
|
|
284 (defvar reftex-index-tag nil
|
|
285 "Stores the tag of the index in an index buffer.")
|
|
286
|
|
287 (defvar reftex-index-return-marker (make-marker)
|
|
288 "Marker which makes it possible to return from index to old position.")
|
|
289
|
|
290 (defvar reftex-index-restriction-indicator nil)
|
|
291 (defvar reftex-index-restriction-data nil)
|
|
292
|
|
293 (defun reftex-index-mode ()
|
|
294 "Major mode for managing Index buffers for LaTeX files.
|
|
295 This buffer was created with RefTeX.
|
|
296 Press `?' for a summary of important key bindings, or check the menu.
|
|
297
|
|
298 Here are all local bindings.
|
|
299
|
|
300 \\{reftex-index-map}"
|
|
301 (interactive)
|
|
302 (kill-all-local-variables)
|
|
303 (setq major-mode 'reftex-index-mode
|
52170
|
304 mode-name "RefTeX Index")
|
25280
|
305 (use-local-map reftex-index-map)
|
|
306 (set (make-local-variable 'revert-buffer-function) 'reftex-index-revert)
|
|
307 (set (make-local-variable 'reftex-index-restriction-data) nil)
|
|
308 (set (make-local-variable 'reftex-index-restriction-indicator) nil)
|
|
309 (setq mode-line-format
|
52170
|
310 (list "---- " 'mode-line-buffer-identification
|
|
311 " " 'global-mode-string
|
|
312 " R<" 'reftex-index-restriction-indicator ">"
|
|
313 " -%-"))
|
25280
|
314 (setq truncate-lines t)
|
46683
|
315 (when (featurep 'xemacs)
|
|
316 ;; XEmacs needs the call to make-local-hook
|
|
317 (make-local-hook 'post-command-hook)
|
|
318 (make-local-hook 'pre-command-hook))
|
25280
|
319 (make-local-variable 'reftex-last-follow-point)
|
|
320 (easy-menu-add reftex-index-menu reftex-index-map)
|
|
321 (add-hook 'post-command-hook 'reftex-index-post-command-hook nil t)
|
|
322 (add-hook 'pre-command-hook 'reftex-index-pre-command-hook nil t)
|
65548
|
323 (run-hooks 'reftex-index-mode-hook))
|
25280
|
324
|
|
325 (defconst reftex-index-help
|
|
326 " AVAILABLE KEYS IN INDEX BUFFER
|
|
327 ==============================
|
|
328 ! A..Z Goto the section of entries starting with this letter.
|
|
329 n / p next-entry / previous-entry
|
|
330 SPC / TAB Show/Goto the corresponding entry in the LaTeX document.
|
|
331 RET Goto the entry and hide the *Index* window (also on mouse-2).
|
|
332 q / k Hide/Kill *Index* buffer.
|
|
333 C-c = Switch to the TOC buffer.
|
|
334 f / c Toggle follow mode / Toggle display of [c]ontext.
|
|
335 g Refresh *Index* buffer.
|
|
336 r / C-u r Reparse the LaTeX document / Reparse entire LaTeX document.
|
|
337 s Switch to a different index (for documents with multiple indices).
|
|
338 e / C-k Edit/Kill the entry.
|
|
339 * | @ Edit specific part of entry: [*]key [|]attribute [@]visual
|
|
340 With prefix: kill that part.
|
41301
|
341 \( ) Toggle entry's beginning/end of page range property.
|
25280
|
342 _ ^ Add/Remove parent key (to make this item a subitem).
|
|
343 } / { Restrict Index to a single document section / Widen.
|
|
344 < / > When restricted, move restriction to previous/next section.")
|
|
345
|
|
346 (defun reftex-index-show-entry (data &optional no-revisit)
|
|
347 ;; Find an index entry associated with DATA and display it highlighted
|
|
348 ;; in another window. NO-REVISIT means we are not allowed to visit
|
|
349 ;; files for this.
|
|
350 ;; Note: This function just looks for the nearest match of the
|
|
351 ;; context string and may fail if the entry moved and an identical
|
|
352 ;; entry is close to the old position. Frequent rescans make this
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
353 ;; safer.
|
25280
|
354 (let* ((file (nth 3 data))
|
52170
|
355 (literal (nth 2 data))
|
|
356 (pos (nth 4 data))
|
|
357 (re (regexp-quote literal))
|
|
358 (match
|
|
359 (cond
|
|
360 ((or (not no-revisit)
|
|
361 (reftex-get-buffer-visiting file))
|
|
362 (switch-to-buffer-other-window
|
|
363 (reftex-get-file-buffer-force file nil))
|
|
364 (goto-char (or pos (point-min)))
|
|
365 (or (looking-at re)
|
|
366 (reftex-nearest-match re (length literal))))
|
87170
|
367 (t (message "%s" reftex-no-follow-message) nil))))
|
25280
|
368 (when match
|
|
369 (goto-char (match-beginning 0))
|
|
370 (recenter '(4))
|
|
371 (reftex-highlight 0 (match-beginning 0) (match-end 0) (current-buffer)))
|
|
372 match))
|
|
373
|
59534
|
374 (defun reftex-display-index (&optional tag overriding-restriction redo
|
52170
|
375 &rest locations)
|
25280
|
376 "Display a buffer with an index compiled from the current document.
|
|
377 When the document has multiple indices, first prompts for the correct one.
|
|
378 When index support is turned off, offer to turn it on.
|
|
379 With one or two `C-u' prefixes, rescan document first.
|
|
380 With prefix 2, restrict index to current document section.
|
|
381 With prefix 3, restrict index to region."
|
|
382
|
|
383 (interactive)
|
|
384
|
|
385 ;; Ensure access to scanning info and rescan buffer if prefix are is '(4).
|
|
386 (let ((current-prefix-arg current-prefix-arg))
|
|
387 (reftex-ensure-index-support t)
|
|
388 (reftex-access-scan-info current-prefix-arg))
|
|
389
|
|
390 (set-marker reftex-index-return-marker (point))
|
|
391 (setq reftex-last-follow-point 1)
|
|
392
|
|
393 ;; Determine the correct index to process
|
|
394 (let* ((docstruct (symbol-value reftex-docstruct-symbol))
|
52170
|
395 (docstruct-symbol reftex-docstruct-symbol)
|
|
396 (index-tag (or tag (reftex-index-select-tag)))
|
|
397 (master (reftex-TeX-master-file))
|
|
398 (calling-file (buffer-file-name))
|
|
399 (restriction
|
|
400 (or overriding-restriction
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
401 (and (not redo)
|
52170
|
402 (reftex-get-restriction current-prefix-arg docstruct))))
|
|
403 (locations
|
|
404 ;; See if we are on an index macro as initial position
|
|
405 (or locations
|
|
406 (let* ((what-macro (reftex-what-macro-safe 1))
|
|
407 (macro (car what-macro))
|
|
408 (here-I-am (when (member macro reftex-macros-with-index)
|
|
409 (save-excursion
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
410 (goto-char (+ (cdr what-macro)
|
52170
|
411 (length macro)))
|
|
412 (reftex-move-over-touching-args)
|
|
413 (reftex-where-am-I)))))
|
|
414 (if (eq (car (car here-I-am)) 'index)
|
|
415 (list (car here-I-am))))))
|
|
416 buffer-name)
|
25280
|
417
|
|
418 (setq buffer-name (reftex-make-index-buffer-name index-tag))
|
|
419
|
|
420 ;; Goto the buffer and put it into the correct mode
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
421
|
25280
|
422 (when (or restriction current-prefix-arg)
|
52170
|
423 (reftex-kill-buffer buffer-name))
|
25280
|
424
|
|
425 (if (get-buffer-window buffer-name)
|
52170
|
426 (select-window (get-buffer-window buffer-name))
|
104768
17d2ae0948e2
Remove unnecessary bindings of default-major-mode (all are followed by
Glenn Morris <rgm@gnu.org>
diff
changeset
|
427 (switch-to-buffer buffer-name))
|
25280
|
428
|
|
429 (or (eq major-mode 'reftex-index-mode) (reftex-index-mode))
|
|
430
|
|
431 ;; If the buffer is currently restricted, empty it to force update.
|
|
432 (when reftex-index-restriction-data
|
|
433 (reftex-erase-buffer))
|
|
434 (set (make-local-variable 'reftex-last-index-file) calling-file)
|
|
435 (set (make-local-variable 'reftex-index-tag) index-tag)
|
|
436 (set (make-local-variable 'reftex-docstruct-symbol) docstruct-symbol)
|
|
437 (if restriction
|
52170
|
438 (setq reftex-index-restriction-indicator (car restriction)
|
|
439 reftex-index-restriction-data (cdr restriction))
|
59534
|
440 (if (not redo)
|
52170
|
441 (setq reftex-index-restriction-indicator nil
|
|
442 reftex-index-restriction-data nil)))
|
25280
|
443 (when (= (buffer-size) 0)
|
|
444 ;; buffer is empty - fill it
|
|
445 (message "Building %s buffer..." buffer-name)
|
|
446
|
|
447 (setq buffer-read-only nil)
|
|
448 (insert (format
|
|
449 "INDEX <%s> on %s
|
|
450 Restriction: <%s>
|
|
451 SPC=view TAB=goto RET=goto+hide [e]dit [q]uit [r]escan [f]ollow [?]Help
|
|
452 ------------------------------------------------------------------------------
|
|
453 " index-tag (abbreviate-file-name master)
|
|
454 (if (eq (car (car reftex-index-restriction-data)) 'toc)
|
|
455 (nth 2 (car reftex-index-restriction-data))
|
|
456 reftex-index-restriction-indicator)))
|
|
457
|
|
458 (if (reftex-use-fonts)
|
|
459 (put-text-property 1 (point) 'face reftex-index-header-face))
|
|
460 (put-text-property 1 (point) 'intangible t)
|
|
461
|
|
462 (reftex-insert-index docstruct index-tag)
|
|
463 (goto-char (point-min))
|
|
464 (run-hooks 'reftex-display-copied-context-hook)
|
|
465 (message "Building %s buffer...done." buffer-name)
|
|
466 (setq buffer-read-only t))
|
|
467 (and locations (apply 'reftex-find-start-point (point) locations))
|
|
468 (if reftex-index-restriction-indicator
|
|
469 (message "Index restricted: <%s>" reftex-index-restriction-indicator))))
|
|
470
|
|
471 (defun reftex-insert-index (docstruct tag &optional update-one remark)
|
|
472 ;; Insert an index into the current buffer. Entries are from the
|
|
473 ;; DOCSTRUCT.
|
|
474 ;; TAG is the subindex to process.
|
|
475 ;; UPDATE-ONE: When non-nil, delete the entry at point and replace
|
|
476 ;; it with whatever the DOCSTRUCT contains.
|
|
477 ;; REMARK can be a note to add to the entry.
|
|
478 (let* ((all docstruct)
|
52170
|
479 (indent " ")
|
|
480 (context reftex-index-include-context)
|
|
481 (context-indent (concat indent " "))
|
|
482 (section-chars (mapcar 'identity reftex-index-section-letters))
|
|
483 (this-section-char 0)
|
|
484 (font (reftex-use-fonts))
|
|
485 (bor (car reftex-index-restriction-data))
|
|
486 (eor (nth 1 reftex-index-restriction-data))
|
|
487 (mouse-face
|
|
488 (if (memq reftex-highlight-selection '(mouse both))
|
|
489 reftex-mouse-selected-face
|
|
490 nil))
|
|
491 (index-face (reftex-verified-face reftex-label-face
|
|
492 'font-lock-constant-face
|
|
493 'font-lock-reference-face))
|
|
494 sublist cell from to first-char)
|
25280
|
495
|
|
496 ;; Make the sublist and sort it
|
|
497 (when bor
|
|
498 (setq all (or (memq bor all) all)))
|
|
499
|
|
500 (while (setq cell (pop all))
|
|
501 (if (eq cell eor)
|
52170
|
502 (setq all nil)
|
|
503 (and (eq (car cell) 'index)
|
|
504 (equal (nth 1 cell) tag)
|
|
505 (push cell sublist))))
|
25280
|
506 (setq sublist (sort (nreverse sublist)
|
52170
|
507 (lambda (a b) (string< (nth 8 a) (nth 8 b)))))
|
25280
|
508
|
|
509 (when update-one
|
|
510 ;; Delete the entry at place
|
|
511 (and (bolp) (forward-char 1))
|
|
512 (delete-region (previous-single-property-change (1+ (point)) :data)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
513 (or (next-single-property-change (point) :data)
|
52170
|
514 (point-max))))
|
25280
|
515
|
|
516 ;; Walk through the list and insert all entries
|
|
517 (while (setq cell (pop sublist))
|
|
518 (unless update-one
|
52170
|
519 (setq first-char (upcase (string-to-char (nth 6 cell))))
|
|
520 (when (and (not (equal first-char this-section-char))
|
|
521 (member first-char section-chars))
|
|
522 ;; There is a new initial letter, so start a new section
|
|
523 (reftex-index-insert-new-letter first-char font)
|
|
524 (setq section-chars (delete first-char section-chars)
|
|
525 this-section-char first-char))
|
|
526 (when (= this-section-char 0)
|
|
527 (setq this-section-char ?!)
|
|
528 (reftex-index-insert-new-letter this-section-char font)))
|
25280
|
529
|
|
530 (setq from (point))
|
|
531 (insert indent (nth 7 cell))
|
|
532 (when font
|
52170
|
533 (setq to (point))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
534 (put-text-property
|
52170
|
535 (- (point) (length (nth 7 cell))) to
|
|
536 'face index-face)
|
|
537 (goto-char to))
|
25280
|
538
|
|
539 (when (or remark (nth 9 cell))
|
52170
|
540 (and (< (current-column) 40)
|
|
541 ;; FIXME: maybe this is too slow?
|
|
542 (insert (make-string (max (- 40 (current-column)) 0) ?\ )))
|
|
543 (and (nth 9 cell) (insert " " (substring (nth 5 cell) (nth 9 cell))))
|
|
544 (and remark (insert " " remark)))
|
25280
|
545
|
|
546 (insert "\n")
|
|
547 (setq to (point))
|
|
548
|
|
549 (when context
|
52170
|
550 (insert context-indent (nth 2 cell) "\n")
|
|
551 (setq to (point)))
|
25280
|
552 (put-text-property from to :data cell)
|
|
553 (when mouse-face
|
52170
|
554 (put-text-property from (1- to)
|
|
555 'mouse-face mouse-face))
|
25280
|
556 (goto-char to))))
|
|
557
|
|
558
|
|
559 (defun reftex-index-insert-new-letter (letter &optional font)
|
|
560 ;; Start a new section in the index
|
|
561 (let ((from (point)))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
562 (insert "\n" letter letter letter
|
52170
|
563 "-----------------------------------------------------------------")
|
25280
|
564 (when font
|
|
565 (put-text-property from (point) 'face reftex-index-section-face))
|
|
566 (insert "\n")))
|
|
567
|
|
568 (defun reftex-get-restriction (arg docstruct)
|
|
569 ;; Interprete the prefix ARG and derive index restriction specs.
|
|
570 (let* ((beg (min (point) (or (condition-case nil (mark) (error nil))
|
52170
|
571 (point-max))))
|
|
572 (end (max (point) (or (condition-case nil (mark) (error nil))
|
|
573 (point-min))))
|
|
574 bor eor label here-I-am)
|
25280
|
575 (cond
|
|
576 ((eq arg 2)
|
|
577 (setq here-I-am (car (reftex-where-am-I))
|
52170
|
578 bor (if (eq (car here-I-am) 'toc)
|
|
579 here-I-am
|
|
580 (reftex-last-assoc-before-elt
|
|
581 'toc here-I-am docstruct))
|
|
582 eor (car (memq (assq 'toc (cdr (memq bor docstruct))) docstruct))
|
|
583 label (nth 6 bor)))
|
25280
|
584 ((eq arg 3)
|
|
585 (save-excursion
|
52170
|
586 (setq label "region")
|
|
587 (goto-char beg)
|
|
588 (setq bor (car (reftex-where-am-I)))
|
|
589 (setq bor (nth 1 (memq bor docstruct)))
|
|
590 (goto-char end)
|
|
591 (setq eor (nth 1 (memq (car (reftex-where-am-I)) docstruct)))))
|
25280
|
592 (t nil))
|
|
593 (if (and label (or bor eor))
|
52170
|
594 (list label bor eor)
|
25280
|
595 nil)))
|
|
596
|
|
597 (defun reftex-index-pre-command-hook ()
|
|
598 ;; Used as pre command hook in *Index* buffer
|
|
599 (reftex-unhighlight 0)
|
|
600 (reftex-unhighlight 1))
|
|
601
|
|
602 (defun reftex-index-post-command-hook ()
|
|
603 ;; Used in the post-command-hook for the *Index* buffer
|
|
604 (when (get-text-property (point) :data)
|
|
605 (and (> (point) 1)
|
52170
|
606 (not (get-text-property (point) 'intangible))
|
|
607 (memq reftex-highlight-selection '(cursor both))
|
|
608 (reftex-highlight 1
|
|
609 (or (previous-single-property-change (1+ (point)) :data)
|
|
610 (point-min))
|
|
611 (or (next-single-property-change (point) :data)
|
|
612 (point-max)))))
|
25280
|
613 (if (integerp reftex-index-follow-mode)
|
|
614 ;; Remove delayed action
|
|
615 (setq reftex-index-follow-mode t)
|
|
616 (and reftex-index-follow-mode
|
52170
|
617 (not (equal reftex-last-follow-point (point)))
|
|
618 ;; Show context in other window
|
|
619 (setq reftex-last-follow-point (point))
|
|
620 (condition-case nil
|
|
621 (reftex-index-visit-location nil (not reftex-revisit-to-follow))
|
|
622 (error t)))))
|
25280
|
623
|
|
624 (defun reftex-index-show-help ()
|
|
625 "Show a summary of special key bindings."
|
|
626 (interactive)
|
|
627 (with-output-to-temp-buffer "*RefTeX Help*"
|
|
628 (princ reftex-index-help))
|
|
629 (reftex-enlarge-to-fit "*RefTeX Help*" t)
|
|
630 ;; If follow mode is active, arrange to delay it one command
|
|
631 (if reftex-index-follow-mode
|
|
632 (setq reftex-index-follow-mode 1)))
|
|
633
|
|
634 (defun reftex-index-next (&optional arg)
|
|
635 "Move to next selectable item."
|
|
636 (interactive "p")
|
|
637 (setq reftex-callback-fwd t)
|
|
638 (or (eobp) (forward-char 1))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
639 (goto-char (or (next-single-property-change (point) :data)
|
52170
|
640 (point)))
|
25280
|
641 (unless (get-text-property (point) :data)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
642 (goto-char (or (next-single-property-change (point) :data)
|
52170
|
643 (point)))))
|
25280
|
644 (defun reftex-index-previous (&optional arg)
|
|
645 "Move to previous selectable item."
|
|
646 (interactive "p")
|
|
647 (setq reftex-callback-fwd nil)
|
|
648 (goto-char (or (previous-single-property-change (point) :data)
|
52170
|
649 (point)))
|
25280
|
650 (unless (get-text-property (point) :data)
|
|
651 (goto-char (or (previous-single-property-change (point) :data)
|
52170
|
652 (point)))))
|
25280
|
653 (defun reftex-index-toggle-follow ()
|
|
654 "Toggle follow (other window follows with context)."
|
|
655 (interactive)
|
|
656 (setq reftex-last-follow-point -1)
|
|
657 (setq reftex-index-follow-mode (not reftex-index-follow-mode)))
|
|
658 (defun reftex-index-toggle-context ()
|
|
659 "Toggle inclusion of label context in *Index* buffer.
|
|
660 Label context is only displayed when the labels are there as well."
|
|
661 (interactive)
|
|
662 (setq reftex-index-include-context (not reftex-index-include-context))
|
|
663 (reftex-index-revert))
|
|
664 (defun reftex-index-view-entry ()
|
|
665 "View document location in other window."
|
|
666 (interactive)
|
|
667 (reftex-index-visit-location))
|
|
668 (defun reftex-index-goto-entry-and-hide ()
|
|
669 "Go to document location in other window. Hide the *Index* window."
|
|
670 (interactive)
|
|
671 (reftex-index-visit-location 'hide))
|
|
672 (defun reftex-index-goto-entry ()
|
|
673 "Go to document location in other window. *Index* window stays."
|
|
674 (interactive)
|
|
675 (reftex-index-visit-location t))
|
|
676 (defun reftex-index-mouse-goto-line-and-hide (ev)
|
|
677 "Go to document location in other window. Hide the *Index* window."
|
|
678 (interactive "e")
|
|
679 (mouse-set-point ev)
|
|
680 (reftex-index-visit-location 'hide))
|
|
681 (defun reftex-index-quit ()
|
|
682 "Hide the *Index* window and do not move point."
|
|
683 (interactive)
|
|
684 (or (one-window-p) (delete-window))
|
|
685 (switch-to-buffer (marker-buffer reftex-index-return-marker))
|
|
686 (goto-char (or (marker-position reftex-index-return-marker) (point))))
|
|
687 (defun reftex-index-quit-and-kill ()
|
|
688 "Kill the *Index* buffer."
|
|
689 (interactive)
|
|
690 (kill-buffer (current-buffer))
|
|
691 (or (one-window-p) (delete-window))
|
|
692 (switch-to-buffer (marker-buffer reftex-index-return-marker))
|
|
693 (goto-char (or (marker-position reftex-index-return-marker) (point))))
|
|
694 (defun reftex-index-goto-toc (&rest ignore)
|
|
695 "Switch to the table of contents of the current document.
|
|
696 The function will go to the section where the entry at point was defined."
|
|
697 (interactive)
|
|
698 (if (get-text-property (point) :data)
|
|
699 (reftex-index-goto-entry)
|
|
700 (switch-to-buffer (marker-buffer reftex-index-return-marker)))
|
|
701 (delete-other-windows)
|
|
702 (reftex-toc))
|
|
703 (defun reftex-index-rescan (&rest ignore)
|
|
704 "Regenerate the *Index* buffer after reparsing file of section at point."
|
|
705 (interactive)
|
|
706 (let ((index-tag reftex-index-tag))
|
|
707 (if (and reftex-enable-partial-scans
|
52170
|
708 (null current-prefix-arg))
|
|
709 (let* ((data (get-text-property (point) :data))
|
|
710 (file (nth 3 data))
|
|
711 (line (+ (count-lines (point-min) (point)) (if (bolp) 1 0))))
|
|
712 (if (not file)
|
|
713 (error "Don't know which file to rescan. Try `C-u r'")
|
|
714 (switch-to-buffer (reftex-get-file-buffer-force file))
|
|
715 (setq current-prefix-arg '(4))
|
59534
|
716 (reftex-display-index index-tag nil 'redo line)))
|
25280
|
717 (reftex-index-Rescan))
|
|
718 (reftex-kill-temporary-buffers)))
|
|
719 (defun reftex-index-Rescan (&rest ignore)
|
|
720 "Regenerate the *Index* buffer after reparsing the entire document."
|
|
721 (interactive)
|
|
722 (let ((index-tag reftex-index-tag)
|
52170
|
723 (line (+ (count-lines (point-min) (point)) (if (bolp) 1 0))))
|
25280
|
724 (switch-to-buffer
|
|
725 (reftex-get-file-buffer-force reftex-last-index-file))
|
|
726 (setq current-prefix-arg '(16))
|
59534
|
727 (reftex-display-index index-tag nil 'redo line)))
|
25280
|
728 (defun reftex-index-revert (&rest ignore)
|
|
729 "Regenerate the *Index* from the internal lists. No reparsing os done."
|
|
730 (interactive)
|
|
731 (let ((buf (current-buffer))
|
52170
|
732 (index-tag reftex-index-tag)
|
|
733 (data (get-text-property (point) :data))
|
|
734 (line (+ (count-lines (point-min) (point)) (if (bolp) 1 0))))
|
25280
|
735 (switch-to-buffer
|
|
736 (reftex-get-file-buffer-force reftex-last-index-file))
|
|
737 (reftex-erase-buffer buf)
|
|
738 (setq current-prefix-arg nil
|
52170
|
739 reftex-last-follow-point 1)
|
59534
|
740 (reftex-display-index index-tag nil 'redo data line)))
|
25280
|
741 (defun reftex-index-switch-index-tag (&rest ignore)
|
|
742 "Switch to a different index of the same document."
|
|
743 (interactive)
|
|
744 (switch-to-buffer
|
|
745 (reftex-get-file-buffer-force reftex-last-index-file))
|
|
746 (setq current-prefix-arg nil)
|
59534
|
747 (reftex-display-index nil nil 'redo))
|
25280
|
748
|
|
749 (defun reftex-index-restrict-to-section (&optional force)
|
|
750 "Restrict index to entries defined in same document sect. as entry at point."
|
|
751 ;; Optional FORCE means, even if point is not on an index entry.
|
|
752 (interactive)
|
|
753 (let* ((data (get-text-property (point) :data))
|
52170
|
754 (docstruct (symbol-value reftex-docstruct-symbol))
|
|
755 bor eor)
|
25280
|
756 (if (and (not data) force)
|
52170
|
757 (setq data (assq 'toc docstruct)))
|
25280
|
758 (when data
|
|
759 (setq bor (reftex-last-assoc-before-elt 'toc data docstruct)
|
52170
|
760 eor (car (memq (assq 'toc (cdr (memq bor docstruct)))
|
|
761 docstruct))
|
|
762 reftex-index-restriction-data (list bor eor)
|
|
763 reftex-index-restriction-indicator (nth 6 bor) )))
|
25280
|
764 (reftex-index-revert))
|
|
765
|
|
766 (defun reftex-index-widen (&rest ignore)
|
|
767 "Show the unrestricted index (all entries)."
|
|
768 (interactive)
|
|
769 (setq reftex-index-restriction-indicator nil
|
52170
|
770 reftex-index-restriction-data nil)
|
25280
|
771 (reftex-index-revert)
|
|
772 (message "Index widened"))
|
|
773 (defun reftex-index-restriction-forward (&rest ignore)
|
|
774 "Restrict to previous section.
|
|
775 When index is currently unrestricted, restrict it to a section.
|
|
776 When index is restricted, select the next section as restriction criterion."
|
|
777 (interactive)
|
|
778 (let* ((docstruct (symbol-value reftex-docstruct-symbol))
|
52170
|
779 (bor (nth 1 reftex-index-restriction-data)))
|
25280
|
780 (if (or (not bor)
|
52170
|
781 (not (eq (car bor) 'toc)))
|
|
782 (reftex-index-restrict-to-section t)
|
25280
|
783 (setq reftex-index-restriction-indicator (nth 6 bor)
|
52170
|
784 reftex-index-restriction-data
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
785 (list bor
|
52170
|
786 (car (memq (assq 'toc (cdr (memq bor docstruct)))
|
|
787 docstruct))))
|
25280
|
788 (reftex-index-revert))))
|
|
789 (defun reftex-index-restriction-backward (&rest ignore)
|
|
790 "Restrict to next section.
|
|
791 When index is currently unrestricted, restrict it to a section.
|
|
792 When index is restricted, select the previous section as restriction criterion."
|
|
793 (interactive)
|
|
794 (let* ((docstruct (symbol-value reftex-docstruct-symbol))
|
52170
|
795 (eor (car reftex-index-restriction-data))
|
|
796 (bor (reftex-last-assoc-before-elt 'toc eor docstruct t)))
|
25280
|
797 (if (or (not bor)
|
52170
|
798 (not (eq (car bor) 'toc)))
|
|
799 (reftex-index-restrict-to-section t)
|
25280
|
800 (setq reftex-index-restriction-indicator (nth 6 bor)
|
52170
|
801 reftex-index-restriction-data
|
|
802 (list bor eor))
|
25280
|
803 (reftex-index-revert))))
|
|
804
|
|
805 (defun reftex-index-visit-location (&optional final no-revisit)
|
|
806 ;; Visit the tex file corresponding to the index entry on the current line.
|
|
807 ;; If FINAL is t, stay there
|
|
808 ;; If FINAL is 'hide, hide the *Index* window.
|
|
809 ;; Otherwise, move cursor back into *Index* window.
|
|
810 ;; NO-REVISIT means don't visit files, just use live biffers.
|
|
811
|
|
812 (let* ((data (get-text-property (point) :data))
|
|
813 (index-window (selected-window))
|
|
814 show-window show-buffer match)
|
|
815
|
|
816 (unless data (error "Don't know which index entry to visit"))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
817
|
25280
|
818 (if (eq (car data) 'index)
|
52170
|
819 (setq match (reftex-index-show-entry data no-revisit)))
|
25280
|
820
|
|
821 (setq show-window (selected-window)
|
|
822 show-buffer (current-buffer))
|
|
823
|
|
824 (unless match
|
|
825 (select-window index-window)
|
|
826 (error "Cannot find location"))
|
|
827
|
|
828 (select-window index-window)
|
|
829
|
|
830 ;; Use the `final' parameter to decide what to do next
|
|
831 (cond
|
|
832 ((eq final t)
|
|
833 (reftex-unhighlight 0)
|
|
834 (select-window show-window))
|
|
835 ((eq final 'hide)
|
|
836 (reftex-unhighlight 0)
|
|
837 (or (one-window-p) (delete-window))
|
|
838 (switch-to-buffer show-buffer))
|
|
839 (t nil))))
|
|
840
|
|
841 (defun reftex-index-analyze-entry (data)
|
|
842 ;; This splits the index context so that key, attribute and visual
|
|
843 ;; values are accessible individually.
|
|
844 (interactive)
|
|
845 (let* ((arg (nth 5 data))
|
52170
|
846 (context (nth 2 data))
|
|
847 (sc reftex-index-special-chars)
|
|
848 (boa (if (string-match (regexp-quote (concat "{" arg "}")) context)
|
|
849 (1+ (match-beginning 0))
|
|
850 (error "Something is wrong here")))
|
|
851 (eoa (1- (match-end 0)))
|
|
852 (boactual (if (string-match (concat "[^" (nth 3 sc) "]" (nth 2 sc))
|
|
853 context boa)
|
|
854 (1+ (match-beginning 0))
|
|
855 eoa))
|
|
856 (boattr (if (string-match (concat "[^" (nth 3 sc) "]" (nth 1 sc))
|
|
857 context boa)
|
|
858 (1+ (match-beginning 0))
|
|
859 boactual))
|
|
860 (pre (substring context 0 boa))
|
|
861 (key (substring context boa boattr))
|
|
862 (attr (substring context boattr boactual))
|
|
863 (actual (substring context boactual eoa))
|
|
864 (post (substring context eoa)))
|
25280
|
865 (list pre key attr actual post)))
|
|
866
|
|
867 (defun reftex-index-edit ()
|
|
868 "Edit the index entry at point."
|
|
869 (interactive)
|
|
870 (let* ((data (get-text-property (point) :data))
|
52170
|
871 old new)
|
25280
|
872 (unless data (error "Don't know which index entry to edit"))
|
|
873 (reftex-index-view-entry)
|
|
874 (setq old (nth 2 data) new (read-string "Edit: " old))
|
|
875 (reftex-index-change-entry new)))
|
|
876
|
|
877 (defun reftex-index-toggle-range-beginning ()
|
|
878 "Toggle the page range start attribute `|('."
|
|
879 (interactive)
|
|
880 (let* ((data (get-text-property (point) :data))
|
52170
|
881 (bor (concat (nth 1 reftex-index-special-chars) "("))
|
|
882 new analyze attr)
|
25280
|
883 (unless data (error "Don't know which index entry to edit"))
|
|
884 (setq analyze (reftex-index-analyze-entry data)
|
52170
|
885 attr (nth 2 analyze))
|
25280
|
886 (setf (nth 2 analyze) (if (string= attr bor) "" bor))
|
|
887 (setq new (apply 'concat analyze))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
888 (reftex-index-change-entry
|
25280
|
889 new (if (string= (nth 2 analyze) bor)
|
52170
|
890 "Entry is now START-OF-PAGE-RANGE"
|
|
891 "START-OF-PAGE-RANGE canceled"))))
|
25280
|
892
|
|
893 (defun reftex-index-toggle-range-end ()
|
|
894 "Toggle the page-range-end attribute `|)'."
|
|
895 (interactive)
|
|
896 (let* ((data (get-text-property (point) :data))
|
52170
|
897 (eor (concat (nth 1 reftex-index-special-chars) ")"))
|
|
898 new analyze attr)
|
25280
|
899 (unless data (error "Don't know which index entry to edit"))
|
|
900 (setq analyze (reftex-index-analyze-entry data)
|
52170
|
901 attr (nth 2 analyze))
|
25280
|
902 (setf (nth 2 analyze) (if (string= attr eor) "" eor))
|
|
903 (setq new (apply 'concat analyze))
|
|
904 (reftex-index-change-entry
|
|
905 new (if (string= (nth 2 analyze) eor)
|
52170
|
906 "Entry is now END-OF-PAGE-RANGE"
|
|
907 "END-OF-PAGE-RANGE canceled"))))
|
25280
|
908
|
|
909 (defun reftex-index-edit-key ()
|
|
910 "Edit the KEY part of the index entry."
|
|
911 (interactive)
|
|
912 (reftex-index-edit-part nil 1 "" "Key: " t))
|
|
913
|
|
914 (defun reftex-index-edit-attribute (&optional arg)
|
|
915 "EDIT the ATTRIBUTE part of the entry. With arg: remove entire ATTRIBUTE."
|
|
916 (interactive "P")
|
|
917 (reftex-index-edit-part arg 2 (nth 1 reftex-index-special-chars)
|
52170
|
918 "Attribute: "))
|
25280
|
919
|
|
920 (defun reftex-index-edit-visual (&optional arg)
|
|
921 "EDIT the VISUAL part of the entry. With arg: remove entire VISUAL string."
|
|
922 (interactive "P")
|
|
923 (reftex-index-edit-part arg 3 (nth 2 reftex-index-special-chars) "Visual: "))
|
|
924
|
|
925 (defun reftex-index-edit-part (arg n initial prompt &optional dont-allow-empty)
|
|
926 ;; This function does the work for all partial editing commands
|
|
927 (let* ((data (get-text-property (point) :data))
|
52170
|
928 new analyze opart npart)
|
25280
|
929 (unless data (error "Don't know which index entry to edit"))
|
|
930 ;; Analyze the whole context string
|
|
931 (setq analyze (reftex-index-analyze-entry data)
|
52170
|
932 opart (nth n analyze))
|
25280
|
933 (and (> (length opart) 0) (setq opart (substring opart 1)))
|
|
934 ;; Have the user editing the part
|
|
935 (setq npart (if arg "" (read-string (concat prompt initial) opart)))
|
|
936 ;; Tests:
|
|
937 (cond ((string= npart opart)
|
52170
|
938 (error "Not changed"))
|
|
939 ((string= npart "")
|
|
940 (if dont-allow-empty
|
60918
|
941 (error "Invalid value")
|
52170
|
942 (setf (nth n analyze) npart)))
|
|
943 (t (setf (nth n analyze) (concat initial npart))))
|
25280
|
944 (setq new (apply 'concat analyze))
|
|
945 ;; Change the entry and insert the changed version into the index.
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
946 (reftex-index-change-entry
|
25280
|
947 new (if (string= npart "")
|
52170
|
948 (format "Deleted: %s" opart)
|
|
949 (format "New value is: %s" npart)))))
|
25280
|
950
|
|
951 (defun reftex-index-level-down ()
|
|
952 "Make index entry a subitem of another entry."
|
|
953 (interactive)
|
|
954 (let* ((data (get-text-property (point) :data))
|
52170
|
955 (docstruct (symbol-value reftex-docstruct-symbol))
|
|
956 old new prefix key)
|
25280
|
957 (unless data (error "Don't know which index entry to change"))
|
|
958 (setq old (nth 2 data)
|
52170
|
959 key (nth 6 data)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
960 prefix (completing-read
|
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
961 "Prefix: "
|
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
962 (reftex-sublist-nth
|
52170
|
963 docstruct 6
|
|
964 (lambda (x)
|
|
965 (and (eq (car x) 'index)
|
|
966 (string= (nth 1 x) reftex-index-tag))) t)))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
967 (unless (string-match
|
52170
|
968 (concat (regexp-quote (car reftex-index-special-chars)) "\\'")
|
|
969 prefix)
|
25280
|
970 (setq prefix (concat prefix (car reftex-index-special-chars))))
|
|
971 (if (string-match (regexp-quote key) old)
|
52170
|
972 (setq new (replace-match (concat prefix key) t t old))
|
25280
|
973 (error "Cannot construct new index key"))
|
|
974 (reftex-index-change-entry new (format "Added prefix: %s" prefix))))
|
|
975
|
|
976 (defun reftex-index-level-up ()
|
|
977 "Remove the highest level of a hierarchical index entry."
|
|
978 (interactive)
|
|
979 (let* ((data (get-text-property (point) :data))
|
52170
|
980 old new prefix)
|
25280
|
981 (unless data (error "Don't know which entry to change"))
|
|
982 (setq old (nth 2 data))
|
|
983 (if (string-match (concat "{\\([^" (nth 0 reftex-index-special-chars) "]*"
|
52170
|
984 "[^" (nth 3 reftex-index-special-chars) "]"
|
|
985 (regexp-quote (nth 0 reftex-index-special-chars))
|
|
986 "\\)")
|
|
987 old)
|
|
988 (setq prefix (substring old (match-beginning 1) (match-end 1))
|
|
989 new (concat (substring old 0 (match-beginning 1))
|
|
990 (substring old (match-end 1))))
|
25280
|
991 (error "Entry is not a subitem"))
|
|
992 (reftex-index-change-entry new (format "Removed prefix: %s" prefix))))
|
|
993
|
|
994 (defun reftex-index-kill ()
|
|
995 "FIXME: Not yet implemented"
|
|
996 (interactive)
|
|
997 (error "This function is currently not implemented"))
|
|
998
|
|
999 (defun reftex-index-undo ()
|
|
1000 "FIXME: Not yet implemented"
|
|
1001 (interactive)
|
|
1002 (error "This function is currently not implemented"))
|
|
1003
|
|
1004 (defun reftex-index-change-entry (new &optional message)
|
|
1005 ;; Change the full context string of the index entry at point to
|
|
1006 ;; NEW. This actually edits the buffer where the entry is defined.
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1007
|
25280
|
1008 (let* ((data (get-text-property (point) :data))
|
52170
|
1009 old beg end info)
|
25280
|
1010 (unless data (error "Cannot change entry"))
|
|
1011 (reftex-index-view-entry)
|
|
1012 (setq beg (match-beginning 0) end (match-end 0))
|
|
1013 (setq old (nth 2 data))
|
|
1014 (and (equal old new) (error "Entry unchanged"))
|
105813
|
1015 (with-current-buffer (get-file-buffer (nth 3 data))
|
25280
|
1016 (goto-char beg)
|
|
1017 (unless (looking-at (regexp-quote old))
|
52170
|
1018 (error "This should not happen (reftex-index-change-entry)"))
|
25280
|
1019 (delete-region beg end)
|
|
1020 (insert new)
|
|
1021 (goto-char (1- beg))
|
|
1022 (when (and (re-search-forward (reftex-everything-regexp) nil t)
|
52170
|
1023 (match-end 10)
|
|
1024 (< (abs (- (match-beginning 10) beg)) (length new))
|
|
1025 (setq info (reftex-index-info-safe buffer-file-name)))
|
|
1026 (setcdr data (cdr info))))
|
25280
|
1027 (let ((buffer-read-only nil))
|
|
1028 (save-excursion
|
52170
|
1029 (reftex-insert-index (list data) reftex-index-tag t
|
|
1030 "EDITED")))
|
25280
|
1031 (setq reftex-last-follow-point 1)
|
65583
|
1032 (and message (message "%s" message))))
|
25280
|
1033
|
|
1034 ;; Index map
|
|
1035 (define-key reftex-index-map (if (featurep 'xemacs) [(button2)] [(mouse-2)])
|
|
1036 'reftex-index-mouse-goto-line-and-hide)
|
69228
|
1037 (define-key reftex-index-map [follow-link] 'mouse-face)
|
25280
|
1038
|
|
1039 (substitute-key-definition
|
|
1040 'next-line 'reftex-index-next reftex-index-map global-map)
|
|
1041 (substitute-key-definition
|
|
1042 'previous-line 'reftex-index-previous reftex-index-map global-map)
|
|
1043
|
|
1044 (loop for x in
|
|
1045 '(("n" . reftex-index-next)
|
52170
|
1046 ("p" . reftex-index-previous)
|
|
1047 ("?" . reftex-index-show-help)
|
|
1048 (" " . reftex-index-view-entry)
|
|
1049 ("\C-m" . reftex-index-goto-entry-and-hide)
|
|
1050 ("\C-i" . reftex-index-goto-entry)
|
|
1051 ("\C-k" . reftex-index-kill)
|
|
1052 ("r" . reftex-index-rescan)
|
|
1053 ("R" . reftex-index-Rescan)
|
|
1054 ("g" . revert-buffer)
|
|
1055 ("q" . reftex-index-quit)
|
|
1056 ("k" . reftex-index-quit-and-kill)
|
|
1057 ("f" . reftex-index-toggle-follow)
|
|
1058 ("s" . reftex-index-switch-index-tag)
|
|
1059 ("e" . reftex-index-edit)
|
|
1060 ("^" . reftex-index-level-up)
|
|
1061 ("_" . reftex-index-level-down)
|
|
1062 ("}" . reftex-index-restrict-to-section)
|
|
1063 ("{" . reftex-index-widen)
|
|
1064 (">" . reftex-index-restriction-forward)
|
|
1065 ("<" . reftex-index-restriction-backward)
|
|
1066 ("(" . reftex-index-toggle-range-beginning)
|
|
1067 (")" . reftex-index-toggle-range-end)
|
|
1068 ("|" . reftex-index-edit-attribute)
|
|
1069 ("@" . reftex-index-edit-visual)
|
|
1070 ("*" . reftex-index-edit-key)
|
|
1071 ("\C-c=". reftex-index-goto-toc)
|
|
1072 ("c" . reftex-index-toggle-context))
|
25280
|
1073 do (define-key reftex-index-map (car x) (cdr x)))
|
|
1074
|
|
1075 (loop for key across "0123456789" do
|
|
1076 (define-key reftex-index-map (vector (list key)) 'digit-argument))
|
|
1077 (define-key reftex-index-map "-" 'negative-argument)
|
|
1078
|
|
1079 ;; The capital letters and the exclamation mark
|
|
1080 (loop for key across (concat "!" reftex-index-section-letters) do
|
|
1081 (define-key reftex-index-map (vector (list key))
|
52170
|
1082 (list 'lambda '() '(interactive)
|
|
1083 (list 'reftex-index-goto-letter key))))
|
25280
|
1084
|
|
1085 (defun reftex-index-goto-letter (char)
|
|
1086 "Go to the CHAR section in the index."
|
|
1087 (let ((pos (point))
|
52170
|
1088 (case-fold-search nil))
|
104543
|
1089 (goto-char (point-min))
|
|
1090 (forward-line 2)
|
25280
|
1091 (if (re-search-forward (concat "^" (char-to-string char)) nil t)
|
52170
|
1092 (progn
|
|
1093 (beginning-of-line)
|
|
1094 (recenter 0)
|
|
1095 (reftex-index-next))
|
25280
|
1096 (goto-char pos)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1097 (if (eq char ?!)
|
52170
|
1098 (error "This <%s> index does not contain entries sorted before the letters"
|
|
1099 reftex-index-tag)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1100 (error "This <%s> index does not contain entries starting with `%c'"
|
52170
|
1101 reftex-index-tag char)))))
|
25280
|
1102
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1103 (easy-menu-define
|
25280
|
1104 reftex-index-menu reftex-index-map
|
|
1105 "Menu for Index buffer"
|
|
1106 `("Index"
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1107 ["Goto section A-Z"
|
25280
|
1108 (message "To go to a section, just press any of: !%s"
|
52170
|
1109 reftex-index-section-letters) t]
|
25280
|
1110 ["Show Entry" reftex-index-view-entry t]
|
|
1111 ["Go To Entry" reftex-index-goto-entry t]
|
|
1112 ["Exit & Go To Entry" reftex-index-goto-entry-and-hide t]
|
|
1113 ["Table of Contents" reftex-index-goto-toc t]
|
|
1114 ["Quit" reftex-index-quit t]
|
|
1115 "--"
|
|
1116 ("Update"
|
|
1117 ["Rebuilt *Index* Buffer" revert-buffer t]
|
|
1118 "--"
|
|
1119 ["Rescan One File" reftex-index-rescan reftex-enable-partial-scans]
|
|
1120 ["Rescan Entire Document" reftex-index-Rescan t])
|
|
1121 ("Restrict"
|
|
1122 ["Restrict to section" reftex-index-restrict-to-section t]
|
|
1123 ["Widen" reftex-index-widen reftex-index-restriction-indicator]
|
|
1124 ["Next Section" reftex-index-restriction-forward
|
|
1125 reftex-index-restriction-indicator]
|
|
1126 ["Previous Section" reftex-index-restriction-backward
|
|
1127 reftex-index-restriction-indicator])
|
|
1128 ("Edit"
|
|
1129 ["Edit Entry" reftex-index-edit t]
|
|
1130 ["Edit Key" reftex-index-edit-key t]
|
|
1131 ["Edit Attribute" reftex-index-edit-attribute t]
|
|
1132 ["Edit Visual" reftex-index-edit-visual t]
|
|
1133 "--"
|
|
1134 ["Add Parentkey" reftex-index-level-down t]
|
|
1135 ["Remove Parentkey " reftex-index-level-up t]
|
|
1136 "--"
|
|
1137 ["Make Start-of-Range" reftex-index-toggle-range-beginning t]
|
|
1138 ["Make End-of-Range" reftex-index-toggle-range-end t]
|
|
1139 "--"
|
|
1140 ["Kill Entry" reftex-index-kill nil]
|
|
1141 "--"
|
|
1142 ["Undo" reftex-index-undo nil])
|
|
1143 ("Options"
|
|
1144 ["Context" reftex-index-toggle-context :style toggle
|
|
1145 :selected reftex-index-include-context]
|
|
1146 "--"
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1147 ["Follow Mode" reftex-index-toggle-follow :style toggle
|
25280
|
1148 :selected reftex-index-follow-mode])
|
|
1149 "--"
|
|
1150 ["Help" reftex-index-show-help t]))
|
|
1151
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1152
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1153 ;;----------------------------------------------------------------------
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1154 ;; The Index Phrases File
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1155
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1156 ;; Some constants and variables
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1157 (defconst reftex-index-phrases-comment-regexp "^[ \t]*%.*"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1158 "Regular expression to match comment lines in phrases buffer")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1159 (defconst reftex-index-phrases-macrodef-regexp
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1160 "^\\(>>>INDEX_MACRO_DEFINITION:\\)[ \t]+\\(\\S-\\)\\( *\t[ \t]*\\)\\([^\t]*[^ \t]\\)\\( *\t[ \t]*\\)\\(\\S-+\\)"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1161 "Regular expression to match macro definition lines the phrases buffer.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1162 ;(defconst reftex-index-phrases-macrodef-regexp
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1163 ; "^\\(>>>INDEX_MACRO_DEFINITION:\\)[ \t]+\\(\\S-\\)\\([ \t]*\\)\\([^\t]*[^ \t]\\)\\([ \t]*\\)\\(nil\\|t\\)[ \t]*$"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1164 ; "Regular expression to match macro definition lines the phrases buffer.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1165 ;This version would allow just spaces as separators.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1166 (defconst reftex-index-phrases-phrase-regexp1
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1167 "^\\(\\S-?\\)\\(\t\\)\\([^\t\n]*\\S-\\)\\([ \t]*\\)$"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1168 "Regular expression matching phrases which have no separate index key.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1169 (defconst reftex-index-phrases-phrase-regexp2
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1170 "^\\(\\S-?\\)\\(\t\\)\\([^\t]*\\S-\\)\\(\t[ \t]*\\)\\([^\n\t]*\\S-\\)[ \t]*$"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1171 "Regular expression matching phrases which have a separate index key.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1172 (defconst reftex-index-phrases-phrase-regexp12
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1173 "^\\(\\S-?\\)\\(\t\\)\\([^\n\t]*\\S-\\)\\(\\(\t[ \t]*\\)\\([^\n\t]*\\S-\\)\\)?[ \t]*$"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1174 "Regular expression matching all types of phrase lines.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1175 (defvar reftex-index-phrases-macro-data nil
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1176 "Alist containing the information taken from the macro definition lines.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1177 This gets refreshed in every phrases command.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1178 (defvar reftex-index-phrases-files nil
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1179 "List of document files relevant for the phrases file.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1180
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1181 (defvar reftex-index-phrases-font-lock-keywords nil
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1182 "Font lock keywords for reftex-index-phrases-mode.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1183 (defvar reftex-index-phrases-font-lock-defaults nil
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1184 "Font lock defaults for reftex-index-phrases-mode.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1185 (defvar reftex-index-phrases-map (make-sparse-keymap)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1186 "Keymap used for *toc* buffer.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1187
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1188
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1189 (defun reftex-index-phrase-selection-or-word (arg)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1190 "Add current selection or word at point to the phrases buffer.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1191 When you are in transient-mark-mode and the region is active, the
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1192 selection will be used - otherwise the word at point.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1193 You get a chance to edit the entry in the phrases buffer - finish with
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1194 `C-c C-c'."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1195 (interactive "P")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1196 (set-marker reftex-index-return-marker (point))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1197 (reftex-index-selection-or-word arg 'phrase)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1198 (if (eq major-mode 'reftex-index-phrases-mode)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1199 (message "%s"
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1200 (substitute-command-keys
|
52170
|
1201 "Return to LaTeX with \\[reftex-index-phrases-save-and-return]"))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1202
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1203 (defun reftex-index-visit-phrases-buffer ()
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1204 "Switch to the phrases buffer, initialize if empty."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1205 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1206 (reftex-access-scan-info)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1207 (let* ((master (reftex-TeX-master-file))
|
52170
|
1208 (name (concat (file-name-sans-extension master)
|
|
1209 reftex-index-phrase-file-extension)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1210 (find-file name)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1211 (unless (eq major-mode 'reftex-index-phrases-mode)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1212 (reftex-index-phrases-mode))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1213 (if (= (buffer-size) 0)
|
52170
|
1214 (reftex-index-initialize-phrases-buffer master))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1215
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1216 (defun reftex-index-initialize-phrases-buffer (&optional master)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1217 "Initialize the phrases buffer by creating the header.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1218 If the buffer is non-empty, delete the old header first."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1219 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1220 (let* ((case-fold-search t)
|
52170
|
1221 (default-key (car reftex-index-default-macro))
|
|
1222 (default-macro (nth 1 (assoc default-key
|
|
1223 reftex-key-to-index-macro-alist)))
|
|
1224 (macro-alist
|
|
1225 (sort (copy-sequence reftex-index-macro-alist)
|
|
1226 (lambda (a b) (equal (car a) default-macro))))
|
|
1227 macro entry key repeat)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1228
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1229 (if master (set (make-local-variable 'TeX-master)
|
52170
|
1230 (file-name-nondirectory master)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1231
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1232 (when (> (buffer-size) 0)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1233 (goto-char 1)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1234 (set-mark (point))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1235 (while (re-search-forward reftex-index-phrases-macrodef-regexp nil t)
|
52170
|
1236 (end-of-line))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1237 (beginning-of-line 2)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1238 (if (looking-at reftex-index-phrases-comment-regexp)
|
52170
|
1239 (beginning-of-line 2))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1240 (while (looking-at "^[ \t]*$")
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1241 (beginning-of-line 2))
|
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1242 (if (featurep 'xemacs)
|
87941
d77b6e5ee8af
* sieve.el (sieve-make-overlay, sieve-overlay-put, sieve-overlays-at):
Dan Nicolaescu <dann@ics.uci.edu>
diff
changeset
|
1243 (zmacs-activate-region)
|
d77b6e5ee8af
* sieve.el (sieve-make-overlay, sieve-overlay-put, sieve-overlays-at):
Dan Nicolaescu <dann@ics.uci.edu>
diff
changeset
|
1244 (setq mark-active t))
|
65689
|
1245 (if (yes-or-no-p "Delete and rebuild header? ")
|
52170
|
1246 (delete-region (point-min) (point))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1247
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1248 ;; Insert the mode line
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1249 (insert
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1250 (format "%% -*- mode: reftex-index-phrases; TeX-master: \"%s\" -*-\n"
|
52170
|
1251 (file-name-nondirectory (reftex-index-phrase-tex-master))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1252 ;; Insert the macro definitions
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1253 (insert "% Key Macro Format Repeat\n")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1254 (insert "%---------------------------------------------------------------------\n")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1255 (while (setq entry (pop macro-alist))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1256 (setq macro (car entry)
|
52170
|
1257 repeat (nth 7 entry)
|
|
1258 key (car (delq nil (mapcar (lambda (x) (if (equal (nth 1 x) macro)
|
|
1259 (car x)
|
|
1260 nil))
|
|
1261 reftex-key-to-index-macro-alist))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1262 (insert (format ">>>INDEX_MACRO_DEFINITION:\t%s\t%-20s\t%s\n"
|
52170
|
1263 (char-to-string key) (concat macro "{%s}")
|
|
1264 (if repeat "t" "nil"))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1265 (insert "%---------------------------------------------------------------------\n\n\n")))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1266
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1267 (defvar TeX-master)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1268 (defun reftex-index-phrase-tex-master (&optional dir)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1269 "Return the name of the master file associated with a phrase buffer."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1270 (if (and (boundp 'TeX-master)
|
52170
|
1271 (local-variable-p 'TeX-master (current-buffer))
|
|
1272 (stringp TeX-master))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1273 ;; We have a local variable which tells us which file to use
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1274 (expand-file-name TeX-master dir)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1275 ;; have to guess
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1276 (concat (file-name-sans-extension (buffer-file-name)) ".tex")))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1277
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1278 (defun reftex-index-phrases-save-and-return ()
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1279 "Return to where the `reftex-index-phrase-selection-or-word' was called."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1280 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1281 (save-buffer)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1282 (switch-to-buffer (marker-buffer reftex-index-return-marker))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1283 (goto-char (or (marker-position reftex-index-return-marker) (point))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1284
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1285
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1286 (defvar reftex-index-phrases-menu)
|
65548
|
1287 (defvar reftex-index-phrases-marker)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1288 (defvar reftex-index-phrases-restrict-file nil)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1289 ;;;###autoload
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1290 (defun reftex-index-phrases-mode ()
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1291 "Major mode for managing the Index phrases of a LaTeX document.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1292 This buffer was created with RefTeX.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1293
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1294 To insert new phrases, use
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1295 - `C-c \\' in the LaTeX document to copy selection or word
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1296 - `\\[reftex-index-new-phrase]' in the phrases buffer.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1297
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1298 To index phrases use one of:
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1299
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1300 \\[reftex-index-this-phrase] index current phrase
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1301 \\[reftex-index-next-phrase] index next phrase (or N with prefix arg)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1302 \\[reftex-index-all-phrases] index all phrases
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1303 \\[reftex-index-remaining-phrases] index current and following phrases
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1304 \\[reftex-index-region-phrases] index the phrases in the region
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1305
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1306 You can sort the phrases in this buffer with \\[reftex-index-sort-phrases].
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1307 To display information about the phrase at point, use \\[reftex-index-phrases-info].
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1308
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1309 For more information see the RefTeX User Manual.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1310
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1311 Here are all local bindings.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1312
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1313 \\{reftex-index-phrases-map}"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1314 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1315 (kill-all-local-variables)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1316 (setq major-mode 'reftex-index-phrases-mode
|
52170
|
1317 mode-name "Phrases")
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1318 (use-local-map reftex-index-phrases-map)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1319 (set (make-local-variable 'font-lock-defaults)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1320 reftex-index-phrases-font-lock-defaults)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1321 (easy-menu-add reftex-index-phrases-menu reftex-index-phrases-map)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1322 (set (make-local-variable 'reftex-index-phrases-marker) (make-marker))
|
65548
|
1323 (run-hooks 'reftex-index-phrases-mode-hook))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1324 (add-hook 'reftex-index-phrases-mode-hook 'turn-on-font-lock)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1325
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1326 ;; Font Locking stuff
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1327 (let ((ss (if (featurep 'xemacs) 'secondary-selection ''secondary-selection)))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1328 (setq reftex-index-phrases-font-lock-keywords
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1329 (list
|
52170
|
1330 (cons reftex-index-phrases-comment-regexp 'font-lock-comment-face)
|
|
1331 (list reftex-index-phrases-macrodef-regexp
|
|
1332 '(1 font-lock-type-face)
|
|
1333 '(2 font-lock-keyword-face)
|
|
1334 (list 3 ss)
|
|
1335 '(4 font-lock-function-name-face)
|
|
1336 (list 5 ss)
|
|
1337 '(6 font-lock-string-face))
|
|
1338 (list reftex-index-phrases-phrase-regexp1
|
|
1339 '(1 font-lock-keyword-face)
|
|
1340 (list 2 ss)
|
|
1341 '(3 font-lock-string-face)
|
|
1342 (list 4 ss))
|
|
1343 (list reftex-index-phrases-phrase-regexp2
|
|
1344 '(1 font-lock-keyword-face)
|
|
1345 (list 2 ss)
|
|
1346 '(3 font-lock-string-face)
|
|
1347 (list 4 ss)
|
|
1348 '(5 font-lock-function-name-face))
|
|
1349 (cons "^\t$" ss)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1350 (setq reftex-index-phrases-font-lock-defaults
|
52170
|
1351 '((reftex-index-phrases-font-lock-keywords)
|
|
1352 nil t nil beginning-of-line))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1353 (put 'reftex-index-phrases-mode 'font-lock-defaults
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1354 reftex-index-phrases-font-lock-defaults) ; XEmacs
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1355 )
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1356
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1357 (defun reftex-index-next-phrase (&optional arg)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1358 "Index the next ARG phrases in the phrases buffer."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1359 (interactive "p")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1360 (reftex-index-phrases-parse-header t)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1361 (while (> arg 0)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1362 (decf arg)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1363 (end-of-line)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1364 (if (re-search-forward reftex-index-phrases-phrase-regexp12 nil t)
|
52170
|
1365 (progn
|
|
1366 (goto-char (match-beginning 0))
|
59534
|
1367 (reftex-index-this-phrase 'slave))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1368 (error "No more phrase lines after point"))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1369
|
59534
|
1370 (defun reftex-index-this-phrase (&optional slave)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1371 "Index the phrase in the current line.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1372 Does a global search and replace in the entire document. At each
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1373 match, the user will be asked to confirm the replacement."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1374 (interactive)
|
59534
|
1375 (if (not slave) (reftex-index-phrases-parse-header t))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1376 (save-excursion
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1377 (beginning-of-line)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1378 (cond ((looking-at reftex-index-phrases-comment-regexp)
|
59534
|
1379 (if (not slave) (error "Comment line")))
|
52170
|
1380 ((looking-at "^[ \t]*$")
|
59534
|
1381 (if (not slave) (error "Empty line")))
|
52170
|
1382 ((looking-at reftex-index-phrases-macrodef-regexp)
|
59534
|
1383 (if (not slave) (error "Macro definition line")))
|
52170
|
1384 ((looking-at reftex-index-phrases-phrase-regexp12)
|
|
1385 ;; This is a phrase
|
|
1386 (let* ((char (if (not (equal (match-string 1) ""))
|
|
1387 (string-to-char (match-string 1))))
|
|
1388 (phrase (match-string 3))
|
|
1389 (index-key (match-string 6))
|
|
1390 (macro-data (cdr (if (null char)
|
|
1391 (car reftex-index-phrases-macro-data)
|
|
1392 (assoc char reftex-index-phrases-macro-data))))
|
|
1393 (macro-fmt (car macro-data))
|
|
1394 (repeat (nth 1 macro-data))
|
|
1395 (files
|
|
1396 (cond ((and (stringp reftex-index-phrases-restrict-file)
|
|
1397 (file-regular-p reftex-index-phrases-restrict-file))
|
|
1398 (list reftex-index-phrases-restrict-file))
|
|
1399 ((stringp reftex-index-phrases-restrict-file)
|
60918
|
1400 (error "Invalid restriction file %s"
|
52170
|
1401 reftex-index-phrases-restrict-file))
|
|
1402 (t reftex-index-phrases-files)))
|
|
1403 (as-words reftex-index-phrases-search-whole-words))
|
|
1404 (unless macro-data
|
|
1405 (error "No macro associated with key %c" char))
|
|
1406 (unwind-protect
|
|
1407 (let ((overlay-arrow-string "=>")
|
|
1408 (overlay-arrow-position
|
|
1409 reftex-index-phrases-marker)
|
|
1410 (replace-count 0))
|
|
1411 ;; Show the overlay arrow
|
|
1412 (move-marker reftex-index-phrases-marker
|
|
1413 (match-beginning 0) (current-buffer))
|
|
1414 ;; Start the query-replace
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1415 (reftex-query-index-phrase-globally
|
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1416 files phrase macro-fmt
|
52170
|
1417 index-key repeat as-words)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1418 (message "%s replaced"
|
52170
|
1419 (reftex-number replace-count "occurrence"))))))
|
|
1420 (t (error "Cannot parse this line")))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1421
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1422 (defun reftex-index-all-phrases ()
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1423 "Index all phrases in the phrases buffer.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1424 Calls `reftex-index-this-phrase' on each line in the buffer."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1425 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1426 (reftex-index-region-phrases (point-min) (point-max)))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1427
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1428 (defun reftex-index-remaining-phrases ()
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1429 "Index all phrases in the phrases buffer.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1430 Calls `reftex-index-this-phrase' on each line ay and below point in
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1431 the buffer."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1432 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1433 (beginning-of-line)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1434 (reftex-index-region-phrases (point) (point-max)))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1435
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1436 (defun reftex-index-region-phrases (beg end)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1437 "Index all phrases in the phrases buffer.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1438 Calls `reftex-index-this-phrase' on each line in the region."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1439 (interactive "r")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1440 (reftex-index-phrases-parse-header t)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1441 (goto-char beg)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1442 (while (not (or (eobp)
|
52170
|
1443 (>= (point) end)))
|
59534
|
1444 (save-excursion (reftex-index-this-phrase 'slave))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1445 (beginning-of-line 2)))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1446
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1447 (defun reftex-index-phrases-parse-header (&optional get-files)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1448 "Parse the header of a phrases file to extract the macro definitions.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1449 The definitions get stored in `reftex-index-phrases-macro-data'.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1450 Also switches to the LaTeX document to find out which files belong to
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1451 the document and stores the list in `reftex-index-phrases-files'."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1452 (let* ((master (reftex-index-phrase-tex-master))
|
52170
|
1453 buf)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1454 (if get-files
|
52170
|
1455 ;; Get the file list
|
|
1456 (save-excursion
|
|
1457 (setq buf (reftex-get-file-buffer-force master))
|
|
1458 (unless buf (error "Master file %s not found" master))
|
|
1459 (set-buffer buf)
|
|
1460 (reftex-access-scan-info)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1461 (setq reftex-index-phrases-files
|
52170
|
1462 (reftex-all-document-files))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1463 ;; Parse the files header for macro definitions
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1464 (setq reftex-index-phrases-macro-data nil)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1465 (save-excursion
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1466 (goto-char (point-min))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1467 (while (re-search-forward reftex-index-phrases-macrodef-regexp nil t)
|
52170
|
1468 (push (list
|
|
1469 (string-to-char (match-string 2))
|
|
1470 (match-string 4)
|
|
1471 (equal (match-string 6) "t"))
|
|
1472 reftex-index-phrases-macro-data))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1473 ;; Reverse the list, so that the first macro is first
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1474 (if (null reftex-index-phrases-macro-data)
|
52170
|
1475 (error "No valid MACRO DEFINITION line in %s file (make sure to use TAB separators)" reftex-index-phrase-file-extension))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1476 (setq reftex-index-phrases-macro-data
|
52170
|
1477 (nreverse reftex-index-phrases-macro-data))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1478 (goto-char (point-min)))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1479
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1480 (defun reftex-index-phrases-apply-to-region (beg end)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1481 "Index all index phrases in the current region.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1482 This works exactly like global indexing from the index phrases buffer,
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1483 but operation is restricted to the current region. This is useful if
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1484 you need to add/change text in an already indexed document and want to
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1485 index the new part without having to go over the unchanged parts again."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1486 (interactive "r")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1487 (let ((win-conf (current-window-configuration))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1488 (reftex-index-phrases-restrict-file (buffer-file-name)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1489 (save-excursion
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1490 (save-restriction
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1491 (narrow-to-region beg end)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1492 (unwind-protect
|
52170
|
1493 (progn
|
|
1494 ;; Hide the region highlighting
|
87941
d77b6e5ee8af
* sieve.el (sieve-make-overlay, sieve-overlay-put, sieve-overlays-at):
Dan Nicolaescu <dann@ics.uci.edu>
diff
changeset
|
1495 (if (featurep 'xemacs)
|
d77b6e5ee8af
* sieve.el (sieve-make-overlay, sieve-overlay-put, sieve-overlays-at):
Dan Nicolaescu <dann@ics.uci.edu>
diff
changeset
|
1496 (zmacs-deactivate-region)
|
d77b6e5ee8af
* sieve.el (sieve-make-overlay, sieve-overlay-put, sieve-overlays-at):
Dan Nicolaescu <dann@ics.uci.edu>
diff
changeset
|
1497 (deactivate-mark))
|
52170
|
1498 (delete-other-windows)
|
|
1499 (reftex-index-visit-phrases-buffer)
|
|
1500 (reftex-index-all-phrases))
|
|
1501 (set-window-configuration win-conf))))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1502
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1503 (defun reftex-index-new-phrase (&optional text)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1504 "Open a new line in the phrases buffer, insert TEXT."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1505 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1506 (if (and text (stringp text))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1507 (progn
|
52170
|
1508 ;; Check if the phrase is already in the buffer
|
|
1509 (setq text (reftex-index-simplify-phrase text))
|
|
1510 (goto-char (point-min))
|
|
1511 (if (re-search-forward
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1512 (concat "^\\(\\S-*\\)\t\\(" (regexp-quote text)
|
52170
|
1513 "\\) *[\t\n]") nil t)
|
|
1514 (progn
|
|
1515 (goto-char (match-end 2))
|
|
1516 (error "Phrase is already in phrases buffer")))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1517 ;; Add the new phrase line after the last in the buffer
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1518 (goto-char (point-max))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1519 (if (re-search-backward reftex-index-phrases-phrase-regexp12 nil t)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1520 (end-of-line))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1521 (if (not (bolp))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1522 (insert "\n"))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1523 (insert "\t")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1524 (if (and text (stringp text))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1525 (insert text)))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1526
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1527 (defun reftex-index-find-next-conflict-phrase (&optional arg)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1528 "Find the next a phrase which is has conflicts in the phrase buffer.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1529 The command helps to find possible conflicts in the phrase indexing process.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1530 It searches downward from point for a phrase which is repeated elsewhere
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1531 in the buffer, or which is a subphrase of another phrase. If such a
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1532 phrase is found, the phrase info is displayed.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1533 To check the whole buffer, start at the beginning and continue by calling
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1534 this function repeatedly."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1535 (interactive "P")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1536 (if (catch 'exit
|
52170
|
1537 (while (re-search-forward reftex-index-phrases-phrase-regexp12 nil t)
|
|
1538 (goto-char (match-beginning 3))
|
|
1539 (let* ((phrase (match-string 3))
|
|
1540 (case-fold-search reftex-index-phrases-case-fold-search)
|
|
1541 (re (reftex-index-phrases-find-dup-re phrase t)))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1542 (if (save-excursion
|
52170
|
1543 (goto-char (point-min))
|
|
1544 (and (re-search-forward re nil t)
|
|
1545 (re-search-forward re nil t)))
|
|
1546 (throw 'exit t)))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1547 (progn
|
52170
|
1548 (reftex-index-phrases-info)
|
|
1549 (message "Phrase with match conflict discovered"))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1550 (goto-char (point-max))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1551 (error "No further problematic phrases found")))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1552
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1553 (defun reftex-index-phrases-info ()
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1554 "Display information about the phrase at point."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1555 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1556 (save-excursion
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1557 (beginning-of-line)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1558 (unless (looking-at reftex-index-phrases-phrase-regexp12)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1559 (error "Not a phrase line"))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1560 (save-match-data (reftex-index-phrases-parse-header t))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1561 (let* ((char (if (not (equal (match-string 1) ""))
|
52170
|
1562 (string-to-char (match-string 1))))
|
|
1563 (phrase (match-string 3))
|
|
1564 (index-key (match-string 6))
|
|
1565 (index-keys (split-string
|
|
1566 (or index-key phrase)
|
|
1567 reftex-index-phrases-logical-or-regexp))
|
|
1568 (macro-data (cdr (if (null char)
|
|
1569 (car reftex-index-phrases-macro-data)
|
|
1570 (assoc char reftex-index-phrases-macro-data))))
|
|
1571 (macro-fmt (car macro-data))
|
|
1572 (repeat (nth 1 macro-data))
|
|
1573 (as-words reftex-index-phrases-search-whole-words)
|
|
1574 (example (reftex-index-make-replace-string
|
|
1575 macro-fmt (downcase phrase) (car index-keys) repeat))
|
|
1576 (re (reftex-index-make-phrase-regexp phrase as-words t))
|
|
1577 (re1 (reftex-index-phrases-find-dup-re phrase))
|
|
1578 (re2 (reftex-index-phrases-find-dup-re phrase 'sub))
|
|
1579 superphrases
|
|
1580 (nmatches 0)
|
|
1581 (ntimes1 0)
|
|
1582 (ntimes2 0)
|
|
1583 (case-fold-search reftex-index-phrases-case-fold-search)
|
|
1584 file files buf)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1585 (setq files reftex-index-phrases-files)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1586 (save-excursion
|
52170
|
1587 (save-restriction
|
|
1588 (widen)
|
|
1589 (goto-char (point-min))
|
|
1590 (while (re-search-forward re1 nil t)
|
|
1591 (incf ntimes1))
|
|
1592 (goto-char (point-min))
|
|
1593 (while (re-search-forward re2 nil t)
|
|
1594 (push (cons (count-lines 1 (point)) (match-string 1)) superphrases)
|
|
1595 (incf ntimes2))))
|
105813
|
1596 (save-current-buffer
|
52170
|
1597 (while (setq file (pop files))
|
|
1598 (setq buf (reftex-get-file-buffer-force file))
|
|
1599 (when buf
|
|
1600 (set-buffer buf)
|
|
1601 (save-excursion
|
|
1602 (save-restriction
|
|
1603 (widen)
|
|
1604 (goto-char (point-min))
|
|
1605 (let ((case-fold-search reftex-index-phrases-case-fold-search))
|
|
1606 (while (re-search-forward re nil t)
|
|
1607 (or (reftex-in-comment)
|
|
1608 (incf nmatches)))))))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1609 (with-output-to-temp-buffer "*Help*"
|
52170
|
1610 (princ (format " Phrase: %s\n" phrase))
|
|
1611 (princ (format " Macro key: %s\n" char))
|
|
1612 (princ (format " Macro format: %s\n" macro-fmt))
|
|
1613 (princ (format " Repeat: %s\n" repeat))
|
|
1614 (cond
|
|
1615 (index-key
|
|
1616 (let ((iks index-keys) (cnt 0) ik)
|
|
1617 (while (setq ik (pop iks))
|
|
1618 (princ (format "Index entry %d: %s\n" (incf cnt) ik)))))
|
|
1619 (repeat
|
|
1620 (princ (format " Index entry: %s\n" phrase)))
|
|
1621 (t
|
|
1622 (princ (format " Index key: <<Given by the match>>\n"))))
|
|
1623 (princ (format " Example: %s\n" example))
|
|
1624 (terpri)
|
|
1625 (princ (format "Total matches: %s in %s\n"
|
|
1626 (reftex-number nmatches "match" "es")
|
|
1627 (reftex-number (length reftex-index-phrases-files)
|
|
1628 "LaTeX file")))
|
|
1629 (princ (format " Uniqueness: Phrase occurs %s in phrase buffer\n"
|
|
1630 (reftex-number ntimes1 "time")))
|
|
1631 (if (> ntimes2 1)
|
|
1632 (progn
|
|
1633 (princ (format " Superphrases: Phrase matches the following %s in the phrase buffer:\n"
|
|
1634 (reftex-number ntimes2 "line")))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1635 (mapcar (lambda(x)
|
52170
|
1636 (princ (format " Line %4d: %s\n" (car x) (cdr x))))
|
|
1637 (nreverse superphrases))))))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1638
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1639 (defun reftex-index-phrases-set-macro-key ()
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1640 "Change the macro key for the current line.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1641 Prompts for a macro key and insert is at the beginning of the line.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1642 If you reply with SPACE, the macro keyn will be removed, so that the
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1643 default macro will be used. If you reply with `RET', just prints
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1644 information about the currently selected macro."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1645 (interactive)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1646 (reftex-index-phrases-parse-header)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1647 (save-excursion
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1648 (beginning-of-line)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1649 (unless (or (looking-at reftex-index-phrases-phrase-regexp12)
|
52170
|
1650 (looking-at "\t"))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1651 (error "This is not a phrase line"))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1652 (let* ((nc (reftex-index-select-phrases-macro 0))
|
52170
|
1653 (macro-data (assoc nc reftex-index-phrases-macro-data))
|
|
1654 macro-fmt repeat)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1655 (cond (macro-data)
|
52170
|
1656 ((equal nc ?\ )
|
|
1657 (setq nc ""
|
|
1658 macro-data (car reftex-index-phrases-macro-data)))
|
|
1659 ((equal nc ?\C-m)
|
|
1660 (setq nc (char-after (point)))
|
|
1661 (if (equal nc ?\t)
|
|
1662 (setq nc ""
|
|
1663 macro-data (car reftex-index-phrases-macro-data))
|
|
1664 (setq macro-data (assoc nc reftex-index-phrases-macro-data))))
|
|
1665 (t (error "No macro associated with %c" nc)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1666
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1667 (setq macro-fmt (nth 1 macro-data)
|
52170
|
1668 repeat (nth 2 macro-data))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1669 (if macro-data
|
52170
|
1670 (progn
|
|
1671 (if (looking-at "[^\t]") (delete-char 1))
|
|
1672 (insert nc)
|
|
1673 (message "Line will use %s %s repeat" macro-fmt
|
|
1674 (if repeat "with" "without")))
|
|
1675 (error "Abort")))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1676
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1677 (defun reftex-index-sort-phrases (&optional chars-first)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1678 "Sort the phrases lines in the buffer alphabetically.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1679 Normally, this looks only at the phrases. With a prefix arg CHARS-FIRST,
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1680 it first compares the macro identifying chars and then the phrases."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1681 (interactive "P")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1682 ;; Remember the current line, so that we can return
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1683 (let ((line (buffer-substring (progn (beginning-of-line) (point))
|
52170
|
1684 (progn (end-of-line) (point))))
|
|
1685 beg end)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1686 (goto-char (point-min))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1687 ;; Find first and last phrase line in buffer
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1688 (setq beg
|
52170
|
1689 (and (re-search-forward reftex-index-phrases-phrase-regexp12 nil t)
|
|
1690 (match-beginning 0)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1691 (goto-char (point-max))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1692 (setq end (re-search-backward reftex-index-phrases-phrase-regexp12 nil t))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1693 (if end (setq end (progn (goto-char end) (end-of-line) (point))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1694 ;; Take the lines, sort them and re-insert.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1695 (if (and beg end)
|
52170
|
1696 (progn
|
|
1697 (message "Sorting lines...")
|
|
1698 (let* ((lines (split-string (buffer-substring beg end) "\n"))
|
|
1699 (lines1 (sort lines 'reftex-compare-phrase-lines)))
|
|
1700 (message "Sorting lines...done")
|
|
1701 (let ((inhibit-quit t)) ;; make sure we do not loose lines
|
|
1702 (delete-region beg end)
|
|
1703 (insert (mapconcat 'identity lines1 "\n"))))
|
|
1704 (goto-char (point-max))
|
|
1705 (re-search-backward (concat "^" (regexp-quote line) "$") nil t))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1706 (error "Cannot find phrases lines to sort"))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1707
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1708 (defvar chars-first)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1709 (defun reftex-compare-phrase-lines (a b)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1710 "The comparison function used for sorting."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1711 (let (ca cb pa pb c-p p-p)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1712 (if (string-match reftex-index-phrases-phrase-regexp12 a)
|
52170
|
1713 (progn
|
|
1714 ;; Extract macro char and phrase-or-key for a
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1715 (setq ca (match-string 1 a)
|
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1716 pa (downcase
|
52170
|
1717 (or (and reftex-index-phrases-sort-prefers-entry
|
|
1718 (match-string 6 a))
|
|
1719 (match-string 3 a))))
|
|
1720 (if (string-match reftex-index-phrases-phrase-regexp12 b)
|
|
1721 (progn
|
|
1722 ;; Extract macro char and phrase-or-key for b
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1723 (setq cb (match-string 1 b)
|
52170
|
1724 pb (downcase
|
|
1725 (or (and reftex-index-phrases-sort-prefers-entry
|
|
1726 (match-string 6 b))
|
|
1727 (match-string 3 b))))
|
|
1728 (setq c-p (string< ca cb)
|
|
1729 p-p (string< pa pb))
|
|
1730 ;; Do the right comparison, based on the value of `chars-first'
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1731 ;; `chars-first' is bound locally in the calling function
|
52170
|
1732 (if chars-first
|
|
1733 (if (string= ca cb) p-p c-p)
|
|
1734 (if (string= pa pb) c-p p-p)))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1735 ;; If line a does not match, the answer we return determines
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1736 ;; if non-matching lines are collected at the beginning.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1737 ;; When we return t here, non-matching lines form
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1738 ;; block separators for searches.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1739 (not reftex-index-phrases-sort-in-blocks))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1740
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1741 (defvar reftex-index-phrases-menu)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1742 (defun reftex-index-make-phrase-regexp (phrase &optional
|
52170
|
1743 as-words allow-newline)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1744 "Return a regexp matching PHRASE, even if distributed over lines.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1745 With optional arg AS-WORDS, require word boundary at beginning and end.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1746 With optional arg ALLOW-NEWLINE, allow single newline between words."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1747 (let* ((words (split-string phrase))
|
52170
|
1748 (space-re (if allow-newline
|
|
1749 "\\([ \t]*\\(\n[ \t]*\\)?\\|[ \t]\\)"
|
|
1750 "\\([ \t]+\\)")))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1751 (concat (if (and as-words (string-match "\\`\\w" (car words)))
|
59534
|
1752 "\\(\\<\\|[`']\\)" "")
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1753 (mapconcat (lambda (w) (regexp-quote
|
59534
|
1754 (if reftex-index-phrases-case-fold-search
|
|
1755 (downcase w)
|
|
1756 w)))
|
52170
|
1757 words space-re)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1758 (if (and as-words
|
52170
|
1759 (string-match "\\w\\'" (nth (1- (length words)) words)))
|
59534
|
1760 "\\(\\>\\|'\\)" ""))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1761
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1762 (defun reftex-index-simplify-phrase (phrase)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1763 "Make phrase single spaces and single line."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1764 (mapconcat 'identity (split-string phrase) " "))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1765
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1766 (defun reftex-index-phrases-find-dup-re (phrase &optional sub)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1767 "Return a regexp which matches variations of PHRASE (with additional space).
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1768 When SUB ins non-nil, the regexp will also match when PHRASE is a subphrase
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1769 of another phrase. The regexp works lonly in the phrase buffer."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1770 (concat (if sub "^\\S-?\t\\([^\t\n]*" "^\\S-?\t")
|
52170
|
1771 (mapconcat 'regexp-quote (split-string phrase) " +")
|
|
1772 (if sub "[^\t\n]*\\)\\([\t\n]\\|$\\)" " *\\([\t\n]\\|$\\)")))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1773
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1774 (defun reftex-index-make-replace-string (macro-fmt match index-key
|
52170
|
1775 &optional repeat mathp)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1776 "Return the string which can be used as replacement.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1777 Treats the logical `and' for index phrases."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1778 (let ((index-keys (split-string (or index-key match)
|
52170
|
1779 reftex-index-phrases-logical-and-regexp)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1780 (concat
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1781 (mapconcat (lambda (x)
|
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1782 (format macro-fmt
|
52170
|
1783 (format (if mathp reftex-index-math-format "%s") x)))
|
|
1784 index-keys "")
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1785 (if repeat (reftex-index-simplify-phrase match) ""))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1786
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1787 (defun reftex-query-index-phrase-globally (files &rest args)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1788 "Call `reftex-query-index-phrase' for all files in FILES."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1789 (let ((win-conf (current-window-configuration))
|
52170
|
1790 (file))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1791 (unless files (error "No files"))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1792 (unwind-protect
|
52170
|
1793 (progn
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1794 (switch-to-buffer-other-window (reftex-get-file-buffer-force
|
52170
|
1795 (car files)))
|
|
1796 (catch 'no-more-files
|
|
1797 (while (setq file (pop files))
|
|
1798 (switch-to-buffer (reftex-get-file-buffer-force file))
|
|
1799 (save-excursion
|
|
1800 (save-restriction
|
|
1801 (unless (stringp reftex-index-phrases-restrict-file)
|
|
1802 (widen))
|
|
1803 (goto-char (point-min))
|
|
1804 (apply 'reftex-query-index-phrase args))))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1805 (reftex-unhighlight 0)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1806 (set-window-configuration win-conf))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1807
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1808 (defconst reftex-index-phrases-help
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1809 " Keys for query-index search
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1810 ===========================
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1811 y Replace this match
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1812 n Skip this match
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1813 ! Replace this and all further matches in this file
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1814 q / Q Skip match, start next file / start next phrase
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1815 o Use a different indexing macro for this match
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1816 1 - 9 Select one of the multiple phrases
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1817 e Edit the replacement text
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1818 C-r Recursive edit.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1819 s / S Save this buffer / Save all document buffers
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1820 C-g Abort"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1821 "The help string for indexing phrases.")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1822
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1823 (defvar replace-count)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1824 (defun reftex-query-index-phrase (phrase macro-fmt &optional
|
52170
|
1825 index-key repeat as-words)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1826 "Search through buffer for PHRASE, and offer to replace it with an indexed
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1827 version. The index version is derived by applying `format' with MACRO-FMT
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1828 to INDEX-KEY or PHRASE. When REPEAT is non-nil, the PHRASE is inserted
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1829 again after the macro.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1830 AS-WORDS means, the search for PHRASE should require word boundaries at
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1831 both ends."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1832 (let* ((re (reftex-index-make-phrase-regexp phrase as-words 'allow-newline))
|
52170
|
1833 (case-fold-search reftex-index-phrases-case-fold-search)
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1834 (index-keys (split-string
|
52170
|
1835 (or index-key phrase)
|
|
1836 reftex-index-phrases-logical-or-regexp))
|
|
1837 (nkeys (length index-keys))
|
|
1838 (ckey (nth 0 index-keys))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1839 (all-yes nil)
|
65548
|
1840 match rpl char (beg (make-marker)) (end (make-marker)) mathp)
|
|
1841 (move-marker beg 1)
|
|
1842 (move-marker end 1)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1843 (unwind-protect
|
52170
|
1844 (while (re-search-forward re nil t)
|
|
1845 (catch 'next-match
|
59534
|
1846 (if (reftex-in-comment)
|
|
1847 (throw 'next-match nil))
|
52170
|
1848 (if (and (fboundp reftex-index-verify-function)
|
|
1849 (not (funcall reftex-index-verify-function)))
|
|
1850 (throw 'next-match nil))
|
|
1851 (setq match (match-string 0))
|
|
1852 (setq mathp
|
|
1853 (save-match-data
|
|
1854 (condition-case nil (texmathp) (error nil))))
|
65548
|
1855 (setq beg (move-marker beg (match-beginning 0))
|
|
1856 end (move-marker end (match-end 0)))
|
52170
|
1857 (if (and reftex-index-phrases-skip-indexed-matches
|
|
1858 (save-match-data
|
|
1859 (reftex-index-phrase-match-is-indexed beg
|
|
1860 end)))
|
|
1861 (throw 'next-match nil))
|
|
1862 (reftex-highlight 0 (match-beginning 0) (match-end 0))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1863 (setq rpl
|
52170
|
1864 (save-match-data
|
|
1865 (reftex-index-make-replace-string
|
|
1866 macro-fmt (match-string 0) ckey repeat mathp)))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1867 (while
|
52170
|
1868 (not
|
|
1869 (catch 'loop
|
|
1870 (message "REPLACE: %s? (yn!qoe%s?)"
|
|
1871 rpl
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1872 (if (> nkeys 1)
|
52170
|
1873 (concat "1-" (int-to-string nkeys))
|
|
1874 ""))
|
|
1875 (setq char (if all-yes ?y (read-char-exclusive)))
|
|
1876 (cond ((member char '(?y ?Y ?\ ))
|
|
1877 ;; Yes!
|
|
1878 (replace-match rpl t t)
|
|
1879 (incf replace-count)
|
|
1880 ;; See if we should insert newlines to shorten lines
|
|
1881 (and reftex-index-phrases-wrap-long-lines
|
|
1882 (reftex-index-phrases-fixup-line beg end))
|
|
1883 (throw 'loop t))
|
|
1884 ((member char '(?n ?N ?\C-h ?\C-?));; FIXME: DEL
|
|
1885 ;; No
|
|
1886 (throw 'loop t))
|
|
1887 ((equal char ?!)
|
|
1888 ;; Yes for all in this buffer
|
|
1889 (setq all-yes t))
|
|
1890 ((equal char ?q)
|
|
1891 ;; Stop this one in this file
|
|
1892 (goto-char (point-max))
|
|
1893 (throw 'loop t))
|
|
1894 ((equal char ?Q)
|
|
1895 ;; Stop this one
|
|
1896 (throw 'no-more-files t))
|
|
1897 ((equal char ?s)
|
|
1898 (save-buffer))
|
|
1899 ((equal char ?S)
|
|
1900 (reftex-save-all-document-buffers))
|
|
1901 ((equal char ?\C-g)
|
|
1902 (keyboard-quit))
|
|
1903 ((member char '(?o ?O))
|
|
1904 ;; Select a differnt macro
|
|
1905 (let* ((nc (reftex-index-select-phrases-macro 2))
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1906 (macro-data
|
52170
|
1907 (cdr (assoc nc reftex-index-phrases-macro-data)))
|
|
1908 (macro-fmt (car macro-data))
|
|
1909 (repeat (nth 1 macro-data)))
|
|
1910 (if macro-data
|
|
1911 (setq rpl (save-match-data
|
|
1912 (reftex-index-make-replace-string
|
|
1913 macro-fmt match
|
|
1914 ckey repeat mathp)))
|
|
1915 (ding))))
|
|
1916 ((equal char ?\?)
|
|
1917 ;; Help
|
|
1918 (with-output-to-temp-buffer "*Help*"
|
|
1919 (princ reftex-index-phrases-help)))
|
|
1920 ((equal char ?\C-r)
|
|
1921 ;; Recursive edit
|
|
1922 (save-match-data
|
|
1923 (save-excursion
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1924 (message "%s"
|
52170
|
1925 (substitute-command-keys
|
|
1926 "Recursive edit. Resume with \\[exit-recursive-edit]"))
|
|
1927 (recursive-edit))))
|
|
1928 ((equal char ?e)
|
|
1929 (setq rpl (read-string "Edit: " rpl)))
|
|
1930 ((equal char ?0)
|
|
1931 (setq ckey (or index-key phrase)
|
|
1932 rpl (save-match-data
|
|
1933 (reftex-index-make-replace-string
|
|
1934 macro-fmt match ckey repeat mathp))))
|
|
1935 ((and (> char ?0)
|
|
1936 (<= char (+ ?0 nkeys)))
|
|
1937 (setq ckey (nth (1- (- char ?0)) index-keys)
|
|
1938 rpl (save-match-data
|
|
1939 (reftex-index-make-replace-string
|
|
1940 macro-fmt match ckey repeat mathp))))
|
|
1941 (t (ding)))
|
|
1942 nil)))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1943 (message "")
|
65548
|
1944 (move-marker beg nil)
|
|
1945 (move-marker end nil)
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1946 (setq all-yes nil)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1947 (reftex-unhighlight 0))))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1948
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1949 (defun reftex-index-phrase-match-is-indexed (beg end)
|
59534
|
1950 ;; Check if match is in an argument of an index macro, or if an
|
52170
|
1951 ;; index macro is directly attached to the match.
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1952 (save-excursion
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1953 (goto-char end)
|
52170
|
1954 (let* ((all-macros (reftex-what-macro t))
|
65548
|
1955 ; (this-macro (car (car all-macros)))
|
52170
|
1956 (before-macro
|
|
1957 (and (> beg 2)
|
|
1958 (goto-char (1- beg))
|
|
1959 (memq (char-after (point)) '(?\] ?\}))
|
|
1960 (car (reftex-what-macro 1))))
|
|
1961 (after-macro
|
|
1962 (and (goto-char end)
|
|
1963 (looking-at "\\(\\\\[a-zA-Z]+\\*?\\)[[{]")
|
|
1964 (match-string 1)))
|
|
1965 macro)
|
|
1966 (or (catch 'matched
|
|
1967 (while (setq macro (pop all-macros))
|
|
1968 (if (member (car macro) reftex-macros-with-index)
|
|
1969 (throw 'matched t)))
|
|
1970 nil)
|
|
1971 (and before-macro
|
|
1972 (member before-macro reftex-macros-with-index))
|
|
1973 (and after-macro
|
|
1974 (member after-macro reftex-macros-with-index))))))
|
49599
|
1975
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1976 (defun reftex-index-phrases-fixup-line (beg end)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1977 "Insert newlines before BEG and/or after END to shorten line."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1978 (let (bol eol space1 space2)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1979 (save-excursion
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1980 ;; Find line boundaries and possible line breaks near BEG and END
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1981 (beginning-of-line)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1982 (setq bol (point))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1983 (end-of-line)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1984 (setq eol (point))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1985 (goto-char beg)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1986 (skip-chars-backward "^ \n")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1987 (if (and (equal (preceding-char) ?\ )
|
52170
|
1988 (string-match "\\S-" (buffer-substring bol (point))))
|
|
1989 (setq space1 (1- (point))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1990 (goto-char end)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1991 (skip-chars-forward "^ \n")
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1992 (if (and (equal (following-char) ?\ )
|
52170
|
1993 (string-match "\\S-" (buffer-substring (point) eol)))
|
|
1994 (setq space2 (point)))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1995 ;; Now check what we have and insert the newlines
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
1996 (if (<= (- eol bol) fill-column)
|
52170
|
1997 ;; Line is already short
|
|
1998 nil
|
|
1999 (cond
|
|
2000 ((and (not space1) (not space2))) ; No spaces available
|
|
2001 ((not space2) ; Do space1
|
|
2002 (reftex-index-phrases-replace-space space1))
|
|
2003 ((not space1) ; Do space2
|
|
2004 (reftex-index-phrases-replace-space space2))
|
|
2005 (t ; We have both spaces
|
|
2006 (let ((l1 (- space1 bol))
|
|
2007 (l2 (- space2 space1))
|
|
2008 (l3 (- eol space2)))
|
|
2009 (if (> l2 fill-column)
|
|
2010 ;; The central part alone is more than one line
|
|
2011 (progn
|
|
2012 (reftex-index-phrases-replace-space space1)
|
|
2013 (reftex-index-phrases-replace-space space2))
|
|
2014 (if (> (+ l1 l2) fill-column)
|
|
2015 ;; Need to split beginning
|
|
2016 (reftex-index-phrases-replace-space space1))
|
|
2017 (if (> (+ l2 l3) fill-column)
|
|
2018 ;; Need to split end
|
|
2019 (reftex-index-phrases-replace-space space2))))))))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2020
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2021 (defun reftex-index-phrases-replace-space (pos)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2022 "If there is a space at POS, replace it with a newline char.
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2023 Does not do a save-excursion."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2024 (when (equal (char-after pos) ?\ )
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2025 (goto-char pos)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2026 (delete-char 1)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2027 (insert "\n")))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2028
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2029 (defun reftex-index-select-phrases-macro (&optional delay)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2030 "Offer a list of possible index macros and have the user select one."
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2031 (let* ((prompt (concat "Select macro: ["
|
52170
|
2032 (mapconcat (lambda (x) (char-to-string (car x)))
|
|
2033 reftex-index-phrases-macro-data "")
|
|
2034 "] "))
|
|
2035 (help (concat "Select an indexing macro\n========================\n"
|
|
2036 (mapconcat (lambda (x)
|
|
2037 (format " [%c] %s"
|
|
2038 (car x) (nth 1 x)))
|
|
2039 reftex-index-phrases-macro-data "\n"))))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2040 (reftex-select-with-char prompt help delay)))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2041
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2042 ;; Keybindings and Menu for phrases buffer
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2043
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2044 (loop for x in
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2045 '(("\C-c\C-c" . reftex-index-phrases-save-and-return)
|
52170
|
2046 ("\C-c\C-x" . reftex-index-this-phrase)
|
|
2047 ("\C-c\C-f" . reftex-index-next-phrase)
|
|
2048 ("\C-c\C-r" . reftex-index-region-phrases)
|
|
2049 ("\C-c\C-a" . reftex-index-all-phrases)
|
|
2050 ("\C-c\C-d" . reftex-index-remaining-phrases)
|
|
2051 ("\C-c\C-s" . reftex-index-sort-phrases)
|
|
2052 ("\C-c\C-n" . reftex-index-new-phrase)
|
|
2053 ("\C-c\C-m" . reftex-index-phrases-set-macro-key)
|
|
2054 ("\C-c\C-i" . reftex-index-phrases-info)
|
|
2055 ("\C-c\C-t" . reftex-index-find-next-conflict-phrase)
|
|
2056 ("\C-i" . self-insert-command))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2057 do (define-key reftex-index-phrases-map (car x) (cdr x)))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2058
|
99383
a5f24b6e48ef
* international/mule-cmds.el (toggle-enable-multibyte-characters)
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
2059 (easy-menu-define
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2060 reftex-index-phrases-menu reftex-index-phrases-map
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2061 "Menu for Phrases buffer"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2062 '("Phrases"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2063 ["New Phrase" reftex-index-new-phrase t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2064 ["Set Phrase Macro" reftex-index-phrases-set-macro-key t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2065 ["Recreate File Header" reftex-index-initialize-phrases-buffer t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2066 "--"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2067 ("Sort Phrases"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2068 ["Sort" reftex-index-sort-phrases t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2069 "--"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2070 "Sort Options"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2071 ["by Search Phrase" (setq reftex-index-phrases-sort-prefers-entry nil)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2072 :style radio :selected (not reftex-index-phrases-sort-prefers-entry)]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2073 ["by Index Entry" (setq reftex-index-phrases-sort-prefers-entry t)
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2074 :style radio :selected reftex-index-phrases-sort-prefers-entry]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2075 ["in Blocks" (setq reftex-index-phrases-sort-in-blocks
|
52170
|
2076 (not reftex-index-phrases-sort-in-blocks))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2077 :style toggle :selected reftex-index-phrases-sort-in-blocks])
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2078 ["Describe Phrase" reftex-index-phrases-info t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2079 ["Next Phrase Conflict" reftex-index-find-next-conflict-phrase t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2080 "--"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2081 ("Find and Index in Document"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2082 ["Current Phrase" reftex-index-this-phrase t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2083 ["Next Phrase" reftex-index-next-phrase t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2084 ["Current and Following" reftex-index-remaining-phrases t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2085 ["Region Phrases" reftex-index-region-phrases t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2086 ["All Phrases" reftex-index-all-phrases t]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2087 "--"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2088 "Options"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2089 ["Match Whole Words" (setq reftex-index-phrases-search-whole-words
|
52170
|
2090 (not reftex-index-phrases-search-whole-words))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2091 :style toggle :selected reftex-index-phrases-search-whole-words]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2092 ["Case Sensitive Search" (setq reftex-index-phrases-case-fold-search
|
52170
|
2093 (not reftex-index-phrases-case-fold-search))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2094 :style toggle :selected (not
|
52170
|
2095 reftex-index-phrases-case-fold-search)]
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2096 ["Wrap Long Lines" (setq reftex-index-phrases-wrap-long-lines
|
52170
|
2097 (not reftex-index-phrases-wrap-long-lines))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2098 :style toggle :selected reftex-index-phrases-wrap-long-lines]
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2099 ["Skip Indexed Matches" (setq reftex-index-phrases-skip-indexed-matches
|
52170
|
2100 (not reftex-index-phrases-skip-indexed-matches))
|
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2101 :style toggle :selected reftex-index-phrases-skip-indexed-matches])
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2102 "--"
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2103 ["Save and Return" reftex-index-phrases-save-and-return t]))
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2104
|
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
diff
changeset
|
2105
|
93975
|
2106 ;; arch-tag: 4b2362af-c156-42c1-8932-ea2823e205c1
|
25280
|
2107 ;;; reftex-index.el ends here
|