New directory
[bpt/emacs.git] / lisp / textmodes / reftex-global.el
index 84b4c7c..36cecd1 100644 (file)
@@ -1,8 +1,8 @@
 ;;; reftex-global.el --- operations on entire documents with RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
-;; Version: 4.21
+;; Version: 4.18
 
 ;; This file is part of GNU Emacs.
 
@@ -107,26 +107,26 @@ No active TAGS table is required."
   (reftex-access-scan-info t)
 
   (let ((master (reftex-TeX-master-file))
-        (cnt 0)
+       (cnt 0)
         (dlist
          (mapcar
-          (lambda (x)
-            (let (x1)
-              (cond
-               ((memq (car x)
-                      '(toc bof eof bib thebib label-numbers xr xr-doc
-                            master-dir file-error bibview-cache appendix
-                            is-multi index))
-                nil)
-               (t
-                (setq x1 (reftex-all-assoc-string
-                          (car x) (symbol-value reftex-docstruct-symbol)))
-                (if (< 1 (length x1))
-                    (append (list (car x))
-                            (mapcar (lambda(x)
-                                      (abbreviate-file-name (nth 3 x)))
-                                    x1))
-                  (list nil))))))
+         (lambda (x)
+           (let (x1)
+             (cond
+              ((memq (car x)
+                     '(toc bof eof bib thebib label-numbers xr xr-doc
+                           master-dir file-error bibview-cache appendix
+                           is-multi index))
+               nil)
+              (t
+               (setq x1 (reftex-all-assoc-string
+                         (car x) (symbol-value reftex-docstruct-symbol)))
+               (if (< 1 (length x1))
+                   (append (list (car x))
+                           (mapcar (lambda(x)
+                                     (abbreviate-file-name (nth 3 x)))
+                                   x1))
+                 (list nil))))))
           (reftex-uniquify-by-car (symbol-value reftex-docstruct-symbol)))))
 
     (setq dlist (reftex-uniquify-by-car dlist))
@@ -135,19 +135,19 @@ No active TAGS table is required."
     (set (make-local-variable 'TeX-master) master)
     (erase-buffer)
     (insert "                MULTIPLE LABELS IN CURRENT DOCUMENT:\n")
-    (insert 
+    (insert
      " Move point to label and type `r' to run a query-replace on the label\n"
      " and its references.  Type `q' to exit this buffer.\n\n")
     (insert " LABEL               FILE\n")
     (insert " -------------------------------------------------------------\n")
     (use-local-map (make-sparse-keymap))
     (local-set-key [?q] (lambda () "Kill this buffer." (interactive)
-                          (kill-buffer (current-buffer)) (delete-window)))
+                         (kill-buffer (current-buffer)) (delete-window)))
     (local-set-key [?r] 'reftex-change-label)
     (while dlist
       (when (and (car (car dlist))
                  (cdr (car dlist)))
-        (incf cnt)
+       (incf cnt)
         (insert (mapconcat 'identity (car dlist) "\n    ") "\n"))
       (pop dlist))
     (goto-char (point-min))
@@ -157,7 +157,7 @@ No active TAGS table is required."
       (message "Document does not contain duplicate labels."))))
 
 (defun reftex-change-label (&optional from to)
-  "Run `query-replace-regexp' of FROM with TO in all macro arguments.
+  "Run `query-replace-regexp' of FROM with TO in all \\label and \\ref commands.
 Works on the entire multifile document.
 If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
 with the command \\[tags-loop-continue].
@@ -172,8 +172,8 @@ No active TAGS table is required."
       (setq to (read-string (format "Replace label %s with: "
                                     from))))
     (reftex-query-replace-document
-     (concat "{" (regexp-quote from) "}")
-     (format "{%s}" to))))
+     (concat "\\\\\\(label\\|[a-zA-Z]*ref\\){" (regexp-quote from) "}")
+     (format "\\\\\\1{%s}" to))))
 
 (defun reftex-renumber-simple-labels ()
   "Renumber all simple labels in the document to make them sequentially.
@@ -190,33 +190,33 @@ one with the `xr' package."
   (reftex-access-scan-info 1)
   ;; Get some insurance
   (if (and (reftex-is-multi)
-           (not (yes-or-no-p "Replacing all simple labels in multiple files is risky.  Continue? ")))
+          (not (yes-or-no-p "Replacing all simple labels in multiple files is risky.  Continue? ")))
       (error "Abort"))
   ;; Make the translation list
-  (let* ((re-core (concat "\\(" 
-                          (mapconcat 'cdr reftex-typekey-to-prefix-alist "\\|") 
-                          "\\)"))
-         (label-re (concat "\\`" re-core "\\([0-9]+\\)\\'"))
-         (search-re (concat "[{,]\\(" re-core "\\([0-9]+\\)\\)[,}]"))
-         (error-fmt "Undefined label or reference %s. Ignore and continue? ")
-         (label-numbers-alist (mapcar (lambda (x) (cons (cdr x) 0))
-                                      reftex-typekey-to-prefix-alist))
-         (files (reftex-all-document-files))
-         (list (symbol-value reftex-docstruct-symbol))
-         translate-alist n entry label new-label nr-cell changed-sequence)
+  (let* ((re-core (concat "\\("
+                         (mapconcat 'cdr reftex-typekey-to-prefix-alist "\\|")
+                         "\\)"))
+        (label-re (concat "\\`" re-core "\\([0-9]+\\)\\'"))
+        (search-re (concat "[{,]\\(" re-core "\\([0-9]+\\)\\)[,}]"))
+        (error-fmt "Undefined label or reference %s. Ignore and continue? ")
+        (label-numbers-alist (mapcar (lambda (x) (cons (cdr x) 0))
+                                     reftex-typekey-to-prefix-alist))
+        (files (reftex-all-document-files))
+        (list (symbol-value reftex-docstruct-symbol))
+        translate-alist n entry label new-label nr-cell changed-sequence)
 
     (while (setq entry (pop list))
       (when (and (stringp (car entry))
-                 (string-match label-re (car entry)))
-        (setq label (car entry)
-              nr-cell (assoc (match-string 1 (car entry))
-                             label-numbers-alist))
-        (if (assoc label translate-alist)
-            (error "Duplicate label %s" label))
-        (setq new-label (concat (match-string 1 (car entry))
-                                (int-to-string (incf (cdr nr-cell)))))
-        (push (cons label new-label) translate-alist)
-        (or (string= label new-label) (setq changed-sequence t))))
+                (string-match label-re (car entry)))
+       (setq label (car entry)
+             nr-cell (assoc (match-string 1 (car entry))
+                            label-numbers-alist))
+       (if (assoc label translate-alist)
+           (error "Duplicate label %s" label))
+       (setq new-label (concat (match-string 1 (car entry))
+                               (int-to-string (incf (cdr nr-cell)))))
+       (push (cons label new-label) translate-alist)
+       (or (string= label new-label) (setq changed-sequence t))))
 
     (unless changed-sequence
       (error "Simple labels are already in correct sequence"))
@@ -227,79 +227,79 @@ one with the `xr' package."
     (reftex-save-all-document-buffers)
 
     ;; First test to check for erros
-    (setq n (reftex-translate 
-             files search-re translate-alist error-fmt 'test))
+    (setq n (reftex-translate
+            files search-re translate-alist error-fmt 'test))
 
     ;; Now the real thing.
-    (if (yes-or-no-p 
-         (format "Replace %d items at %d places in %d files? "
-                 (length translate-alist) n (length files)))
-        (progn
-          (let ((inhibit-quit t))  ;; Do not disturb...
-            (reftex-translate
-             files search-re translate-alist error-fmt nil)
-            (setq quit-flag nil))
-          (if (and (reftex-is-multi)
-                   (yes-or-no-p "Save entire document? "))
-              (reftex-save-all-document-buffers))
-          ;; Rescan again...
-          (reftex-access-scan-info 1)
-          (message "Done replacing simple labels."))
+    (if (yes-or-no-p
+        (format "Replace %d items at %d places in %d files? "
+                (length translate-alist) n (length files)))
+       (progn
+         (let ((inhibit-quit t))  ;; Do not disturb...
+           (reftex-translate
+            files search-re translate-alist error-fmt nil)
+           (setq quit-flag nil))
+         (if (and (reftex-is-multi)
+                  (yes-or-no-p "Save entire document? "))
+             (reftex-save-all-document-buffers))
+         ;; Rescan again...
+         (reftex-access-scan-info 1)
+         (message "Done replacing simple labels."))
       (message "No replacements done"))))
 
 (defun reftex-translate (files search-re translate-alist error-fmt test)
   ;; In FILES, look for SEARCH-RE and replace match 1 of it with
-  ;; its association in TRANSLATE-ALSIT.  
+  ;; its association in TRANSLATE-ALSIT.
   ;; If we do not find an association and TEST is non-nil, query
-  ;; to ignore the problematic string.  
+  ;; to ignore the problematic string.
   ;; If TEST is nil, it is ignored without query.
   ;; Return the number of replacements.
   (let ((n 0) file label match-data buf macro pos cell)
     (while (setq file (pop files))
       (setq buf (reftex-get-file-buffer-force file))
       (unless buf
-        (error "No such file %s" file))
+       (error "No such file %s" file))
       (set-buffer buf)
       (save-excursion
-        (save-restriction
-          (widen)
-          (goto-char (point-min))
-          (while (re-search-forward search-re nil t)
-            (backward-char)
-            (save-excursion
-              (setq label (reftex-match-string 1)
-                    cell (assoc label translate-alist)
-                    match-data (match-data)
-                    macro (reftex-what-macro 1)
-                    pos (cdr macro))
-              (goto-char (or pos (point)))
-              (when (and macro
-                         (or (looking-at "\\\\ref")
-                             (looking-at "\\\\[a-zA-Z]*ref\\(range\\)?[^a-zA-Z]")
-                             (looking-at "\\\\ref[a-zA-Z]*[^a-zA-Z]")
-                             (looking-at (format 
-                                          reftex-find-label-regexp-format
-                                          (regexp-quote label)))))
-                ;; OK, we should replace it.
-                (set-match-data match-data)
-                (cond
-                 ((and test (not cell))
-                  ;; We've got a problem
-                  (unwind-protect
-                      (progn
-                        (reftex-highlight 1 (match-beginning 0) (match-end 0))
-                        (ding)
-                        (or (y-or-n-p (format error-fmt label))
-                            (error "Abort")))
-                    (reftex-unhighlight 1)))
-                 ((and test cell)
-                  (incf n))
-                 ((and (not test) cell)
-                  ;; Replace
-                  (goto-char (match-beginning 1))
-                  (delete-region (match-beginning 1) (match-end 1))
-                  (insert (cdr cell)))
-                 (t nil))))))))
+       (save-restriction
+         (widen)
+         (goto-char (point-min))
+         (while (re-search-forward search-re nil t)
+           (backward-char)
+           (save-excursion
+             (setq label (reftex-match-string 1)
+                   cell (assoc label translate-alist)
+                   match-data (match-data)
+                   macro (reftex-what-macro 1)
+                   pos (cdr macro))
+             (goto-char (or pos (point)))
+             (when (and macro
+                        (or (looking-at "\\\\ref")
+                            (looking-at "\\\\[a-zA-Z]*ref\\(range\\)?[^a-zA-Z]")
+                            (looking-at "\\\\ref[a-zA-Z]*[^a-zA-Z]")
+                            (looking-at (format
+                                         reftex-find-label-regexp-format
+                                         (regexp-quote label)))))
+               ;; OK, we should replace it.
+               (set-match-data match-data)
+               (cond
+                ((and test (not cell))
+                 ;; We've got a problem
+                 (unwind-protect
+                     (progn
+                       (reftex-highlight 1 (match-beginning 0) (match-end 0))
+                       (ding)
+                       (or (y-or-n-p (format error-fmt label))
+                           (error "Abort")))
+                   (reftex-unhighlight 1)))
+                ((and test cell)
+                 (incf n))
+                ((and (not test) cell)
+                 ;; Replace
+                 (goto-char (match-beginning 1))
+                 (delete-region (match-beginning 1) (match-end 1))
+                 (insert (cdr cell)))
+                (t nil))))))))
     n))
 
 (defun reftex-save-all-document-buffers ()
@@ -308,13 +308,13 @@ The function is useful after a global action like replacing or renumbering
 labels."
   (interactive)
   (let ((files (reftex-all-document-files))
-        file buffer)
+       file buffer)
     (save-excursion
       (while (setq file (pop files))
-        (setq buffer (reftex-get-buffer-visiting file))
-        (when buffer
-          (set-buffer buffer)
-          (save-buffer))))))
+       (setq buffer (reftex-get-buffer-visiting file))
+       (when buffer
+         (set-buffer buffer)
+         (save-buffer))))))
 
 (defun reftex-ensure-write-access (files)
   "Make sure we have write access to all files in FILES.
@@ -322,21 +322,20 @@ Also checks if buffers visiting the files are in read-only mode."
   (let (file buf)
     (while (setq file (pop files))
       (unless (file-exists-p file)
-        (ding)
-        (or (y-or-n-p (format "No such file %s. Continue? " file))
-            (error "Abort")))
+       (ding)
+       (or (y-or-n-p (format "No such file %s. Continue? " file))
+           (error "Abort")))
       (unless (file-writable-p file)
-        (ding)
-        (or (y-or-n-p (format "No write access to %s. Continue? " file))
-            (error "Abort")))
+       (ding)
+       (or (y-or-n-p (format "No write access to %s. Continue? " file))
+           (error "Abort")))
       (when (and (setq buf (reftex-get-buffer-visiting file))
-                 (save-excursion
-                   (set-buffer buf)
-                   buffer-read-only))
-        (ding)
-        (or (y-or-n-p (format "Buffer %s is read-only. Continue? "
-                              (buffer-name buf)))
-            (error "Abort"))))))
-
-;;; arch-tag: 2dbf7633-92c8-4340-8656-7aa019d0f80d
+                (save-excursion
+                  (set-buffer buf)
+                  buffer-read-only))
+       (ding)
+       (or (y-or-n-p (format "Buffer %s is read-only. Continue? "
+                             (buffer-name buf)))
+           (error "Abort"))))))
+
 ;;; reftex-global.el ends here