Mercurial > emacs
diff lisp/textmodes/reftex-global.el @ 52170:27340819ef07
Updated to version 4.21
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Mon, 11 Aug 2003 12:27:02 +0000 |
parents | 5ade352e8d1c |
children | 695cf19ef79e |
line wrap: on
line diff
--- a/lisp/textmodes/reftex-global.el Mon Aug 11 12:25:27 2003 +0000 +++ b/lisp/textmodes/reftex-global.el Mon Aug 11 12:27:02 2003 +0000 @@ -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 @@ (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 @@ (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 @@ (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 @@ (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 @@ (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 @@ (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 @@ 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,20 @@ (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")))))) ;;; reftex-global.el ends here