Sync to HEAD
[bpt/emacs.git] / lisp / textmodes / reftex-global.el
index 36cecd1..84b4c7c 100644 (file)
@@ -1,8 +1,8 @@
 ;;; reftex-global.el --- operations on entire documents with RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
-;; Version: 4.18
+;; Version: 4.21
 
 ;; 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 \\label and \\ref commands.
+  "Run `query-replace-regexp' of FROM with TO in all macro arguments.
 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 "\\\\\\(label\\|[a-zA-Z]*ref\\){" (regexp-quote from) "}")
-     (format "\\\\\\1{%s}" to))))
+     (concat "{" (regexp-quote from) "}")
+     (format "{%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,20 +322,21 @@ 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"))))))
-
+                 (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
 ;;; reftex-global.el ends here