emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/textmodes/reftex.el [lexbind]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/textmodes/reftex.el [lexbind]
Date: Tue, 14 Oct 2003 19:30:37 -0400

Index: emacs/lisp/textmodes/reftex.el
diff -c emacs/lisp/textmodes/reftex.el:1.40.8.1 
emacs/lisp/textmodes/reftex.el:1.40.8.2
*** emacs/lisp/textmodes/reftex.el:1.40.8.1     Fri Apr  4 01:20:40 2003
--- emacs/lisp/textmodes/reftex.el      Tue Oct 14 19:30:22 2003
***************
*** 1,8 ****
  ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX
! ;; Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
  
  ;; Author: Carsten Dominik <address@hidden>
! ;; Version: 4.18
  ;; Keywords: tex
  
  ;; This file is part of GNU Emacs.
--- 1,8 ----
  ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX
! ;; Copyright (c) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
  
  ;; Author: Carsten Dominik <address@hidden>
! ;; Version: 4.21
  ;; Keywords: tex
  
  ;; This file is part of GNU Emacs.
***************
*** 25,31 ****
  ;;---------------------------------------------------------------------------
  ;;
  ;;; Commentary:
! ;;
  ;; RefTeX is a minor mode with distinct support for \ref, \label, \cite,
  ;; and \index commands in (multi-file) LaTeX documents.
  ;; - A table of contents provides easy access to any part of a document.
--- 25,31 ----
  ;;---------------------------------------------------------------------------
  ;;
  ;;; Commentary:
! ;; 
  ;; RefTeX is a minor mode with distinct support for \ref, \label, \cite,
  ;; and \index commands in (multi-file) LaTeX documents.
  ;; - A table of contents provides easy access to any part of a document.
***************
*** 64,76 ****
  ;;
  ;; The documentation in various formats is also available at
  ;;
! ;;     http://www.strw.leidenuniv.nl/~dominik/Tools/
  ;;
  ;;---------------------------------------------------------------------------
  ;;
  ;; Introduction
  ;; ************
! ;;
  ;; RefTeX is a specialized package for support of labels, references,
  ;; citations, and the index in LaTeX.  RefTeX wraps itself round 4 LaTeX
  ;; macros: `\label', `\ref', `\cite', and `\index'.  Using these macros
--- 64,76 ----
  ;;
  ;; The documentation in various formats is also available at
  ;;
! ;;     http://zon.astro.uva.nl/~dominik/Tools/
  ;;
  ;;---------------------------------------------------------------------------
  ;;
  ;; Introduction
  ;; ************
! ;; 
  ;; RefTeX is a specialized package for support of labels, references,
  ;; citations, and the index in LaTeX.  RefTeX wraps itself round 4 LaTeX
  ;; macros: `\label', `\ref', `\cite', and `\index'.  Using these macros
***************
*** 79,91 ****
  ;; time-consuming tasks almost entirely.  It also provides functions to
  ;; display the structure of a document and to move around in this
  ;; structure quickly.
! ;;
  ;;    *Note Imprint::, for information about who to contact for help, bug
  ;; reports or suggestions.
! ;;
  ;; Environment
  ;; ===========
! ;;
  ;; RefTeX needs to access all files which are part of a multifile
  ;; document, and the BibTeX database files requested by the
  ;; `\bibliography' command.  To find these files, RefTeX will require a
--- 79,91 ----
  ;; time-consuming tasks almost entirely.  It also provides functions to
  ;; display the structure of a document and to move around in this
  ;; structure quickly.
! ;; 
  ;;    *Note Imprint::, for information about who to contact for help, bug
  ;; reports or suggestions.
! ;; 
  ;; Environment
  ;; ===========
! ;; 
  ;; RefTeX needs to access all files which are part of a multifile
  ;; document, and the BibTeX database files requested by the
  ;; `\bibliography' command.  To find these files, RefTeX will require a
***************
*** 94,119 ****
  ;; which are also used by RefTeX.  However, on some systems these
  ;; variables do not contain the full search path.  If RefTeX does not work
  ;; for you because it cannot find some files, read *Note Finding Files::.
! ;;
  ;; Entering RefTeX Mode
  ;; ====================
! ;;
  ;; To turn RefTeX Mode on and off in a particular buffer, use `M-x
  ;; reftex-mode'.  To turn on RefTeX Mode for all LaTeX files, add the
  ;; following lines to your `.emacs' file:
! ;;
  ;;      (add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
  ;;      (add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode
! ;;
  ;; RefTeX in a Nutshell
  ;; ====================
! ;;
  ;;   1. Table of Contents
  ;;      Typing `C-c =' (`reftex-toc') will show a table of contents of the
  ;;      document.  This buffer can display sections, labels and index
  ;;      entries defined in the document.  From the buffer, you can jump
  ;;      quickly to every part of your document.  Press `?' to get help.
! ;;
  ;;   2. Labels and References
  ;;      RefTeX helps to create unique labels and to find the correct key
  ;;      for references quickly.  It distinguishes labels for different
--- 94,119 ----
  ;; which are also used by RefTeX.  However, on some systems these
  ;; variables do not contain the full search path.  If RefTeX does not work
  ;; for you because it cannot find some files, read *Note Finding Files::.
! ;; 
  ;; Entering RefTeX Mode
  ;; ====================
! ;; 
  ;; To turn RefTeX Mode on and off in a particular buffer, use `M-x
  ;; reftex-mode'.  To turn on RefTeX Mode for all LaTeX files, add the
  ;; following lines to your `.emacs' file:
! ;; 
  ;;      (add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
  ;;      (add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode
! ;; 
  ;; RefTeX in a Nutshell
  ;; ====================
! ;; 
  ;;   1. Table of Contents
  ;;      Typing `C-c =' (`reftex-toc') will show a table of contents of the
  ;;      document.  This buffer can display sections, labels and index
  ;;      entries defined in the document.  From the buffer, you can jump
  ;;      quickly to every part of your document.  Press `?' to get help.
! ;; 
  ;;   2. Labels and References
  ;;      RefTeX helps to create unique labels and to find the correct key
  ;;      for references quickly.  It distinguishes labels for different
***************
*** 121,127 ****
  ;;      others), and can be configured to recognize any additional labeled
  ;;      environments you have defined yourself (variable
  ;;      `reftex-label-alist').
! ;;
  ;;         * Creating Labels
  ;;           Type `C-c (' (`reftex-label') to insert a label at point.
  ;;           RefTeX will either
--- 121,127 ----
  ;;      others), and can be configured to recognize any additional labeled
  ;;      environments you have defined yourself (variable
  ;;      `reftex-label-alist').
! ;; 
  ;;         * Creating Labels
  ;;           Type `C-c (' (`reftex-label') to insert a label at point.
  ;;           RefTeX will either
***************
*** 130,146 ****
  ;;                tables) or
  ;;              - insert a simple label made of a prefix and a number (all
  ;;                other environments)
! ;;
  ;;           Which labels are created how is configurable with the variable
  ;;           `reftex-insert-label-flags'.
! ;;
  ;;         * Referencing Labels
  ;;           To make a reference, type `C-c )' (`reftex-reference').  This
  ;;           shows an outline of the document with all labels of a certain
  ;;           type (figure, equation,...) and some label context.
  ;;           Selecting a label inserts a `\ref{LABEL}' macro into the
  ;;           original buffer.
! ;;
  ;;   3. Citations
  ;;      Typing `C-c [' (`reftex-citation') will let you specify a regular
  ;;      expression to search in current BibTeX database files (as
--- 130,146 ----
  ;;                tables) or
  ;;              - insert a simple label made of a prefix and a number (all
  ;;                other environments)
! ;; 
  ;;           Which labels are created how is configurable with the variable
  ;;           `reftex-insert-label-flags'.
! ;; 
  ;;         * Referencing Labels
  ;;           To make a reference, type `C-c )' (`reftex-reference').  This
  ;;           shows an outline of the document with all labels of a certain
  ;;           type (figure, equation,...) and some label context.
  ;;           Selecting a label inserts a `\ref{LABEL}' macro into the
  ;;           original buffer.
! ;; 
  ;;   3. Citations
  ;;      Typing `C-c [' (`reftex-citation') will let you specify a regular
  ;;      expression to search in current BibTeX database files (as
***************
*** 149,155 ****
  ;;      sorted.  The selected article is referenced as `\cite{KEY}' (see
  ;;      the variable `reftex-cite-format' if you want to insert different
  ;;      macros).
! ;;
  ;;   4. Index Support
  ;;      RefTeX helps to enter index entries.  It also compiles all entries
  ;;      into an alphabetically sorted `*Index*' buffer which you can use
--- 149,155 ----
  ;;      sorted.  The selected article is referenced as `\cite{KEY}' (see
  ;;      the variable `reftex-cite-format' if you want to insert different
  ;;      macros).
! ;; 
  ;;   4. Index Support
  ;;      RefTeX helps to enter index entries.  It also compiles all entries
  ;;      into an alphabetically sorted `*Index*' buffer which you can use
***************
*** 157,181 ****
  ;;      index macros and can be configured to recognize any additional
  ;;      macros you have defined (`reftex-index-macros').  Multiple indices
  ;;      are supported.
! ;;
  ;;         * Creating Index Entries
  ;;           To index the current selection or the word at point, type
  ;;           `C-c /' (`reftex-index-selection-or-word').  The default macro
  ;;           `reftex-index-default-macro' will be used.  For a more
  ;;           complex entry type `C-c <' (`reftex-index'), select any of
  ;;           the index macros and enter the arguments with completion.
! ;;
  ;;         * The Index Phrases File (Delayed Indexing)
  ;;           Type `C-c \' (`reftex-index-phrase-selection-or-word') to add
  ;;           the current word or selection to a special _index phrase
  ;;           file_.  RefTeX can later search the document for occurrences
  ;;           of these phrases and let you interactively index the matches.
! ;;
  ;;         * Displaying and Editing the Index
  ;;           To display the compiled index in a special buffer, type `C-c
  ;;           >' (`reftex-display-index').  From that buffer you can check
  ;;           and edit all entries.
! ;;
  ;;   5. Viewing Cross-References
  ;;      When point is on the KEY argument of a cross-referencing macro
  ;;      (`\label', `\ref', `\cite', `\bibitem', `\index', and variations)
--- 157,181 ----
  ;;      index macros and can be configured to recognize any additional
  ;;      macros you have defined (`reftex-index-macros').  Multiple indices
  ;;      are supported.
! ;; 
  ;;         * Creating Index Entries
  ;;           To index the current selection or the word at point, type
  ;;           `C-c /' (`reftex-index-selection-or-word').  The default macro
  ;;           `reftex-index-default-macro' will be used.  For a more
  ;;           complex entry type `C-c <' (`reftex-index'), select any of
  ;;           the index macros and enter the arguments with completion.
! ;; 
  ;;         * The Index Phrases File (Delayed Indexing)
  ;;           Type `C-c \' (`reftex-index-phrase-selection-or-word') to add
  ;;           the current word or selection to a special _index phrase
  ;;           file_.  RefTeX can later search the document for occurrences
  ;;           of these phrases and let you interactively index the matches.
! ;; 
  ;;         * Displaying and Editing the Index
  ;;           To display the compiled index in a special buffer, type `C-c
  ;;           >' (`reftex-display-index').  From that buffer you can check
  ;;           and edit all entries.
! ;; 
  ;;   5. Viewing Cross-References
  ;;      When point is on the KEY argument of a cross-referencing macro
  ;;      (`\label', `\ref', `\cite', `\bibitem', `\index', and variations)
***************
*** 185,198 ****
  ;;      When the enclosing macro is `\cite' or `\ref' and no other message
  ;;      occupies the echo area, information about the citation or label
  ;;      will automatically be displayed in the echo area.
! ;;
  ;;   6. Multifile Documents
  ;;      Multifile Documents are fully supported.  The included files must
  ;;      have a file variable `TeX-master' or `tex-main-file' pointing to
  ;;      the master file.  RefTeX provides cross-referencing information
  ;;      from all parts of the document, and across document borders
  ;;      (`xr.sty').
! ;;
  ;;   7. Document Parsing
  ;;      RefTeX needs to parse the document in order to find labels and
  ;;      other information.  It does it automatically once and updates its
--- 185,198 ----
  ;;      When the enclosing macro is `\cite' or `\ref' and no other message
  ;;      occupies the echo area, information about the citation or label
  ;;      will automatically be displayed in the echo area.
! ;; 
  ;;   6. Multifile Documents
  ;;      Multifile Documents are fully supported.  The included files must
  ;;      have a file variable `TeX-master' or `tex-main-file' pointing to
  ;;      the master file.  RefTeX provides cross-referencing information
  ;;      from all parts of the document, and across document borders
  ;;      (`xr.sty').
! ;; 
  ;;   7. Document Parsing
  ;;      RefTeX needs to parse the document in order to find labels and
  ;;      other information.  It does it automatically once and updates its
***************
*** 201,223 ****
  ;;      with a raw `C-u' prefix, or press the `r' key in the label
  ;;      selection buffer, the table of contents buffer, or the index
  ;;      buffer.
! ;;
  ;;   8. AUCTeX
  ;;      If your major LaTeX mode is AUCTeX, RefTeX can cooperate with it
  ;;      (see variable `reftex-plug-into-AUCTeX').  AUCTeX contains style
  ;;      files which trigger appropriate settings in RefTeX, so that for
  ;;      many of the popular LaTeX packages no additional customizations
  ;;      will be necessary.
! ;;
  ;;   9. Useful Settings
  ;;      To make RefTeX faster for large documents, try these:
  ;;           (setq reftex-enable-partial-scans t)
  ;;           (setq reftex-save-parse-info t)
  ;;           (setq reftex-use-multiple-selection-buffers t)
! ;;
  ;;      To integrate with AUCTeX, use
  ;;           (setq reftex-plug-into-AUCTeX t)
! ;;
  ;;      To make your own LaTeX macro definitions known to RefTeX,
  ;;      customize the variables
  ;;           `reftex-label-alist'          (for label macros/environments)
--- 201,223 ----
  ;;      with a raw `C-u' prefix, or press the `r' key in the label
  ;;      selection buffer, the table of contents buffer, or the index
  ;;      buffer.
! ;; 
  ;;   8. AUCTeX
  ;;      If your major LaTeX mode is AUCTeX, RefTeX can cooperate with it
  ;;      (see variable `reftex-plug-into-AUCTeX').  AUCTeX contains style
  ;;      files which trigger appropriate settings in RefTeX, so that for
  ;;      many of the popular LaTeX packages no additional customizations
  ;;      will be necessary.
! ;; 
  ;;   9. Useful Settings
  ;;      To make RefTeX faster for large documents, try these:
  ;;           (setq reftex-enable-partial-scans t)
  ;;           (setq reftex-save-parse-info t)
  ;;           (setq reftex-use-multiple-selection-buffers t)
! ;; 
  ;;      To integrate with AUCTeX, use
  ;;           (setq reftex-plug-into-AUCTeX t)
! ;; 
  ;;      To make your own LaTeX macro definitions known to RefTeX,
  ;;      customize the variables
  ;;           `reftex-label-alist'          (for label macros/environments)
***************
*** 227,233 ****
  ;;           `reftex-index-default-macro'  (to set the default macro)
  ;;      If you have a large number of macros defined, you may want to write
  ;;      an AUCTeX style file to support them with both AUCTeX and RefTeX.
! ;;
  ;;  10. Where Next?
  ;;      Go ahead and use RefTeX.  Use its menus until you have picked up
  ;;      the key bindings.  For an overview of what you can do in each of
--- 227,233 ----
  ;;           `reftex-index-default-macro'  (to set the default macro)
  ;;      If you have a large number of macros defined, you may want to write
  ;;      an AUCTeX style file to support them with both AUCTeX and RefTeX.
! ;; 
  ;;  10. Where Next?
  ;;      Go ahead and use RefTeX.  Use its menus until you have picked up
  ;;      the key bindings.  For an overview of what you can do in each of
***************
*** 236,248 ****
  ;;      The first part of the manual explains in a tutorial way how to use
  ;;      and customize RefTeX.  The second part is a command and variable
  ;;      reference.
! ;;
  ;;---------------------------------------------------------------------------
  ;;
  ;; AUTHOR
  ;; ======
  ;;
! ;; Carsten Dominik <address@hidden>
  ;;
  ;;         with contributions from Stephen Eglen
  ;;
--- 236,248 ----
  ;;      The first part of the manual explains in a tutorial way how to use
  ;;      and customize RefTeX.  The second part is a command and variable
  ;;      reference.
! ;; 
  ;;---------------------------------------------------------------------------
  ;;
  ;; AUTHOR
  ;; ======
  ;;
! ;; Carsten Dominik <address@hidden>
  ;;
  ;;         with contributions from Stephen Eglen
  ;;
***************
*** 250,256 ****
  ;; XEmacs 21.x.  If you need to install it yourself, you can find a
  ;; distribution at
  ;;
! ;;    http://www.strw.leidenuniv.nl/~dominik/Tools/
  ;;
  ;; THANKS TO:
  ;; ---------
--- 250,256 ----
  ;; XEmacs 21.x.  If you need to install it yourself, you can find a
  ;; distribution at
  ;;
! ;;    http://zon.astro.uva.nl/~dominik/Tools/
  ;;
  ;; THANKS TO:
  ;; ---------
***************
*** 282,287 ****
--- 282,293 ----
  (defvar reftex-tables-dirty t
    "Flag showing if tables need to be re-computed.")
  
+ (eval-and-compile
+   (defun reftex-set-dirty (symbol value)
+     (setq reftex-tables-dirty t)
+     (set symbol value)))
+ 
+ 
  ;;; =========================================================================
  ;;;
  ;;; Configuration variables
***************
*** 294,300 ****
  ;;; Define the formal stuff for a minor mode named RefTeX.
  ;;;
  
! (defconst reftex-version "RefTeX version 4.18"
    "Version string for RefTeX.")
  
  (defvar reftex-mode nil
--- 300,306 ----
  ;;; Define the formal stuff for a minor mode named RefTeX.
  ;;;
  
! (defconst reftex-version "RefTeX version 4.21"
    "Version string for RefTeX.")
  
  (defvar reftex-mode nil
***************
*** 312,321 ****
    (setq reftex-syntax-table (copy-syntax-table))
    (modify-syntax-entry ?\( "." reftex-syntax-table)
    (modify-syntax-entry ?\) "." reftex-syntax-table))
! 
  (unless reftex-syntax-table-for-bib
    (setq reftex-syntax-table-for-bib
!       (copy-syntax-table reftex-syntax-table))
    (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
    (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
    (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
--- 318,327 ----
    (setq reftex-syntax-table (copy-syntax-table))
    (modify-syntax-entry ?\( "." reftex-syntax-table)
    (modify-syntax-entry ?\) "." reftex-syntax-table))
!         
  (unless reftex-syntax-table-for-bib
    (setq reftex-syntax-table-for-bib
!         (copy-syntax-table reftex-syntax-table))
    (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
    (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
    (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
***************
*** 371,400 ****
  
    (if reftex-mode
        (progn
!       ;; Mode was turned on
          (easy-menu-add reftex-mode-menu)
!       (and reftex-plug-into-AUCTeX
!            (reftex-plug-into-AUCTeX))
!       (unless (get 'reftex-auto-view-crossref 'initialized)
!         (and reftex-auto-view-crossref
!              (reftex-toggle-auto-view-crossref))
!         (put 'reftex-auto-view-crossref 'initialized t))
!       (unless (get 'reftex-auto-recenter-toc 'initialized)
!         (and reftex-auto-recenter-toc
!              (reftex-toggle-auto-toc-recenter))
!         (put 'reftex-auto-recenter-toc 'initialized t))
! 
!       ;; Prepare the special syntax tables.
!       (setq reftex-syntax-table (copy-syntax-table (syntax-table)))
!       (modify-syntax-entry ?\( "." reftex-syntax-table)
!       (modify-syntax-entry ?\) "." reftex-syntax-table)
! 
!       (setq reftex-syntax-table-for-bib
!             (copy-syntax-table reftex-syntax-table))
!       (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
!       (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
!       (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
!       (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
  
          (run-hooks 'reftex-mode-hook))
      ;; Mode was turned off
--- 377,406 ----
  
    (if reftex-mode
        (progn
!         ;; Mode was turned on
          (easy-menu-add reftex-mode-menu)
!         (and reftex-plug-into-AUCTeX
!              (reftex-plug-into-AUCTeX))
!         (unless (get 'reftex-auto-view-crossref 'initialized)
!           (and reftex-auto-view-crossref
!                (reftex-toggle-auto-view-crossref))
!           (put 'reftex-auto-view-crossref 'initialized t))
!         (unless (get 'reftex-auto-recenter-toc 'initialized)
!           (and (eq reftex-auto-recenter-toc t)
!                (reftex-toggle-auto-toc-recenter))
!           (put 'reftex-auto-recenter-toc 'initialized t))
! 
!         ;; Prepare the special syntax tables.
!         (setq reftex-syntax-table (copy-syntax-table (syntax-table)))
!         (modify-syntax-entry ?\( "." reftex-syntax-table)
!         (modify-syntax-entry ?\) "." reftex-syntax-table)
!         
!         (setq reftex-syntax-table-for-bib
!               (copy-syntax-table reftex-syntax-table))
!         (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
!         (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
!         (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
!         (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
  
          (run-hooks 'reftex-mode-hook))
      ;; Mode was turned off
***************
*** 419,431 ****
    ;; This function should be installed in `kill-buffer-hook'.
    ;; We are careful to make sure nothing goes wring in this function.
    (when (and (boundp 'reftex-mode)  reftex-mode
!            (boundp 'reftex-save-parse-info)  reftex-save-parse-info
!            (boundp 'reftex-docstruct-symbol)  reftex-docstruct-symbol
!            (symbol-value reftex-docstruct-symbol)
!            (get reftex-docstruct-symbol 'modified))
      ;; Write the file.
      (condition-case nil
!       (reftex-access-parse-file 'write)
        (error nil))))
  
  (defun reftex-kill-emacs-hook ()
--- 425,437 ----
    ;; This function should be installed in `kill-buffer-hook'.
    ;; We are careful to make sure nothing goes wring in this function.
    (when (and (boundp 'reftex-mode)  reftex-mode
!              (boundp 'reftex-save-parse-info)  reftex-save-parse-info
!              (boundp 'reftex-docstruct-symbol)  reftex-docstruct-symbol
!              (symbol-value reftex-docstruct-symbol)
!              (get reftex-docstruct-symbol 'modified))
      ;; Write the file.
      (condition-case nil
!         (reftex-access-parse-file 'write)
        (error nil))))
  
  (defun reftex-kill-emacs-hook ()
***************
*** 433,441 ****
    ;; This function should be installed in `kill-emacs-hook'.
    (save-excursion
      (mapcar (lambda (buf)
!             (set-buffer buf)
!             (reftex-kill-buffer-hook))
!           (buffer-list))))
  
  ;;; =========================================================================
  ;;;
--- 439,447 ----
    ;; This function should be installed in `kill-emacs-hook'.
    (save-excursion
      (mapcar (lambda (buf)
!               (set-buffer buf)
!               (reftex-kill-buffer-hook))
!             (buffer-list))))
  
  ;;; =========================================================================
  ;;;
***************
*** 505,512 ****
        (put (symbol-value symbol) :master-index index)
        ;; Initialize if new symbols.
        (when newflag
!       (set (symbol-value symbol) nil)
!       (put (symbol-value symbol) 'reftex-index-macros-style '(default))))
  
      ;; Return t if the symbols did already exist, nil when we've made them.
      (not newflag)))
--- 511,518 ----
        (put (symbol-value symbol) :master-index index)
        ;; Initialize if new symbols.
        (when newflag
!         (set (symbol-value symbol) nil)
!         (put (symbol-value symbol) 'reftex-index-macros-style '(default))))
  
      ;; Return t if the symbols did already exist, nil when we've made them.
      (not newflag)))
***************
*** 529,538 ****
        ((master
          (cond
           ((fboundp 'TeX-master-file) ; AUCTeX is loaded.  Use its mechanism.
!         (condition-case nil
!             (TeX-master-file t)
!           (error (buffer-file-name))))
!        ((fboundp 'tex-main-file) (tex-main-file)) ; Emacs LaTeX mode
           ((boundp 'TeX-master)       ; The variable is defined - lets use it.
            (cond
             ((eq TeX-master t)
--- 535,544 ----
        ((master
          (cond
           ((fboundp 'TeX-master-file) ; AUCTeX is loaded.  Use its mechanism.
!           (condition-case nil 
!               (TeX-master-file t)
!             (error (buffer-file-name))))
!          ((fboundp 'tex-main-file) (tex-main-file)) ; Emacs LaTeX mode
           ((boundp 'TeX-master)       ; The variable is defined - lets use it.
            (cond
             ((eq TeX-master t)
***************
*** 558,564 ****
            (buffer-file-name)))))
      (cond
       ((null master)
!       (error "Need a filename for this buffer, please save it first"))
       ((or (file-exists-p (concat master ".tex"))
            (reftex-get-buffer-visiting (concat master ".tex")))
        ;; Ahh, an extra .tex was missing...
--- 564,570 ----
            (buffer-file-name)))))
      (cond
       ((null master)
!       (error "Need a filename for this buffer,  please save it first"))
       ((or (file-exists-p (concat master ".tex"))
            (reftex-get-buffer-visiting (concat master ".tex")))
        ;; Ahh, an extra .tex was missing...
***************
*** 569,575 ****
        )
       (t
        ;; Use buffer file name.
!       (setq master (buffer-file-name))))
      (expand-file-name master)))
  
  (defun reftex-is-multi ()
--- 575,581 ----
        )
       (t
        ;; Use buffer file name.
!       (buffer-file-name)))
      (expand-file-name master)))
  
  (defun reftex-is-multi ()
***************
*** 587,601 ****
    (unless reftex-docstruct-symbol
      (reftex-tie-multifile-symbols))
    (when (and reftex-docstruct-symbol
!            (symbolp reftex-docstruct-symbol))
      (put reftex-docstruct-symbol 'reftex-cite-format value)))
  
  (defun reftex-get-cite-format ()
    ;; Return the current citation format.  Either the document-local value in
    ;; reftex-cite-format-symbol, or the global value in reftex-cite-format.
    (if (and reftex-docstruct-symbol
!          (symbolp reftex-docstruct-symbol)
!          (get reftex-docstruct-symbol 'reftex-cite-format))
        (get reftex-docstruct-symbol 'reftex-cite-format)
      reftex-cite-format))
  
--- 593,607 ----
    (unless reftex-docstruct-symbol
      (reftex-tie-multifile-symbols))
    (when (and reftex-docstruct-symbol
!              (symbolp reftex-docstruct-symbol))
      (put reftex-docstruct-symbol 'reftex-cite-format value)))
  
  (defun reftex-get-cite-format ()
    ;; Return the current citation format.  Either the document-local value in
    ;; reftex-cite-format-symbol, or the global value in reftex-cite-format.
    (if (and reftex-docstruct-symbol
!            (symbolp reftex-docstruct-symbol)
!            (get reftex-docstruct-symbol 'reftex-cite-format))
        (get reftex-docstruct-symbol 'reftex-cite-format)
      reftex-cite-format))
  
***************
*** 611,632 ****
    (unless reftex-docstruct-symbol
      (reftex-tie-multifile-symbols))
    (when (and reftex-docstruct-symbol
!            (symbolp reftex-docstruct-symbol))
      (let ((list (get reftex-docstruct-symbol 'reftex-index-macros-style))
!         entry changed)
        (while entry-list
!       (setq entry (pop entry-list))
!       ;; When it is a symbol, remove all other symbols
!       (and (symbolp entry)
!            (not (memq entry list))
!            (setq list (reftex-remove-symbols-from-list list)))
!       ;; Add to list unless already member
!       (unless (member entry list)
!         (setq reftex-tables-dirty t
!               changed t)
!         (push entry list)))
        (when changed
!       (put reftex-docstruct-symbol 'reftex-index-macros-style list)))))
  
  ;;; =========================================================================
  ;;;
--- 617,638 ----
    (unless reftex-docstruct-symbol
      (reftex-tie-multifile-symbols))
    (when (and reftex-docstruct-symbol
!              (symbolp reftex-docstruct-symbol))
      (let ((list (get reftex-docstruct-symbol 'reftex-index-macros-style))
!           entry changed)
        (while entry-list
!         (setq entry (pop entry-list))
!         ;; When it is a symbol, remove all other symbols
!         (and (symbolp entry)
!              (not (memq entry list))
!              (setq list (reftex-remove-symbols-from-list list)))
!         ;; Add to list unless already member
!         (unless (member entry list)
!           (setq reftex-tables-dirty t
!                 changed t)
!           (push entry list)))
        (when changed
!         (put reftex-docstruct-symbol 'reftex-index-macros-style list)))))
  
  ;;; =========================================================================
  ;;;
***************
*** 728,741 ****
  
  ;; A list of all variables in the cache.
  ;; The cache is used to save the compiled versions of some variables.
! (defconst reftex-cache-variables
    '(reftex-memory ;; This MUST ALWAYS be the first!
! 
      ;; Outline
      reftex-section-levels-all
  
      ;; Labels
!     reftex-env-or-mac-alist
      reftex-special-env-parsers
      reftex-macros-with-labels
      reftex-label-mac-list
--- 734,747 ----
  
  ;; A list of all variables in the cache.
  ;; The cache is used to save the compiled versions of some variables.
! (defconst reftex-cache-variables 
    '(reftex-memory ;; This MUST ALWAYS be the first!
!     
      ;; Outline
      reftex-section-levels-all
  
      ;; Labels
!     reftex-env-or-mac-alist 
      reftex-special-env-parsers
      reftex-macros-with-labels
      reftex-label-mac-list
***************
*** 751,757 ****
      reftex-index-macro-alist
      reftex-macros-with-index
      reftex-query-index-macro-prompt
!     reftex-query-index-macro-help
      reftex-key-to-index-macro-alist
  
      ;; Regular expressions
--- 757,763 ----
      reftex-index-macro-alist
      reftex-macros-with-index
      reftex-query-index-macro-prompt
!     reftex-query-index-macro-help 
      reftex-key-to-index-macro-alist
  
      ;; Regular expressions
***************
*** 768,802 ****
  (defun reftex-ensure-compiled-variables ()
    ;; Recompile the label alist when necessary
    (let* ((mem reftex-memory)
!        (cache (get reftex-docstruct-symbol 'reftex-cache))
!        (cmem  (car cache))
!        (alist reftex-label-alist)
!        (levels (get reftex-docstruct-symbol 'reftex-section-levels))
!        (style (get reftex-docstruct-symbol 'reftex-label-alist-style))
!        (default reftex-default-label-alist-entries)
!        (index reftex-index-macros)
!        (istyle (get reftex-docstruct-symbol 'reftex-index-macros-style)))
      (cond
       (reftex-tables-dirty (reftex-compile-variables))
       ((and (eq alist   (nth 0 mem))
!          (eq levels  (nth 1 mem))
!          (eq style   (nth 2 mem))
!          (eq default (nth 3 mem))
!          (eq index   (nth 4 mem))
!          (eq istyle  (nth 5 mem))))  ;; everything is OK
       ((and (eq alist   (nth 0 cmem))
!          (eq levels  (nth 1 cmem))
!          (eq style   (nth 2 cmem))
!          (eq default (nth 2 cmem))
!          (eq index   (nth 4 cmem))
!          (eq istyle  (nth 5 cmem)))
        ;; restore the cache
        (message "Restoring cache")
        (mapcar (lambda (sym) (set sym (pop cache))) reftex-cache-variables))
       (t (reftex-compile-variables)))))
  
  (defun reftex-reset-mode ()
!   "Reset RefTeX Mode.
  This will re-compile the configuration information and remove all
  current scanning information and the parse file to enforce a rescan
  on next use."
--- 774,808 ----
  (defun reftex-ensure-compiled-variables ()
    ;; Recompile the label alist when necessary
    (let* ((mem reftex-memory)
!          (cache (get reftex-docstruct-symbol 'reftex-cache))
!          (cmem  (car cache))
!          (alist reftex-label-alist)
!          (levels (get reftex-docstruct-symbol 'reftex-section-levels))
!          (style (get reftex-docstruct-symbol 'reftex-label-alist-style))
!          (default reftex-default-label-alist-entries)
!          (index reftex-index-macros)
!          (istyle (get reftex-docstruct-symbol 'reftex-index-macros-style)))
      (cond
       (reftex-tables-dirty (reftex-compile-variables))
       ((and (eq alist   (nth 0 mem))
!            (eq levels  (nth 1 mem))
!            (eq style   (nth 2 mem))
!            (eq default (nth 3 mem))
!            (eq index   (nth 4 mem))
!            (eq istyle  (nth 5 mem))))  ;; everything is OK
       ((and (eq alist   (nth 0 cmem))
!            (eq levels  (nth 1 cmem))
!            (eq style   (nth 2 cmem))
!            (eq default (nth 2 cmem))
!            (eq index   (nth 4 cmem))
!            (eq istyle  (nth 5 cmem)))
        ;; restore the cache
        (message "Restoring cache")
        (mapcar (lambda (sym) (set sym (pop cache))) reftex-cache-variables))
       (t (reftex-compile-variables)))))
  
  (defun reftex-reset-mode ()
!   "Reset RefTeX Mode.  
  This will re-compile the configuration information and remove all
  current scanning information and the parse file to enforce a rescan
  on next use."
***************
*** 804,821 ****
  
    ;; Reset the file search path variables
    (loop for prop in '(status master-dir recursive-path rec-type) do
!       (put 'reftex-tex-path prop nil)
!       (put 'reftex-bib-path prop nil))
  
    ;; Kill temporary buffers associated with RefTeX - just in case they
    ;; were not cleaned up properly
    (save-excursion
      (let ((buffer-list '("*RefTeX Help*" "*RefTeX Select*"
!                        "*Duplicate Labels*" "*toc*" " *RefTeX-scratch*"))
!         buf)
        (while (setq buf (pop buffer-list))
!       (if (get-buffer buf)
!           (kill-buffer buf))))
      (reftex-erase-all-selection-and-index-buffers))
  
    ;; Make sure the current document will be rescanned soon.
--- 810,827 ----
  
    ;; Reset the file search path variables
    (loop for prop in '(status master-dir recursive-path rec-type) do
!         (put 'reftex-tex-path prop nil)
!         (put 'reftex-bib-path prop nil))
  
    ;; Kill temporary buffers associated with RefTeX - just in case they
    ;; were not cleaned up properly
    (save-excursion
      (let ((buffer-list '("*RefTeX Help*" "*RefTeX Select*"
!                          "*Duplicate Labels*" "*toc*" " *RefTeX-scratch*"))
!           buf)
        (while (setq buf (pop buffer-list))
!         (if (get-buffer buf)
!             (kill-buffer buf))))
      (reftex-erase-all-selection-and-index-buffers))
  
    ;; Make sure the current document will be rescanned soon.
***************
*** 830,835 ****
--- 836,842 ----
  
    (reftex-compile-variables))
  
+ ;;;###autoload
  (defun reftex-reset-scanning-information ()
    "Reset the symbols containing information from buffer scanning.
  This enforces rescanning the buffer on next use."
***************
*** 846,857 ****
  
  (defun reftex-erase-all-selection-and-index-buffers ()
    ;; Remove all selection buffers associated with current document.
!   (mapcar
     (lambda (type)
       (reftex-erase-buffer (reftex-make-selection-buffer-name type)))
     reftex-typekey-list)
    ;; Kill all index buffers
!   (mapcar
     (lambda (tag)
       (reftex-kill-buffer (reftex-make-index-buffer-name tag)))
     (cdr (assoc 'index-tags (symbol-value reftex-docstruct-symbol)))))
--- 853,864 ----
  
  (defun reftex-erase-all-selection-and-index-buffers ()
    ;; Remove all selection buffers associated with current document.
!   (mapcar 
     (lambda (type)
       (reftex-erase-buffer (reftex-make-selection-buffer-name type)))
     reftex-typekey-list)
    ;; Kill all index buffers
!   (mapcar 
     (lambda (tag)
       (reftex-kill-buffer (reftex-make-index-buffer-name tag)))
     (cdr (assoc 'index-tags (symbol-value reftex-docstruct-symbol)))))
***************
*** 867,900 ****
  
    ;; Record that we have done this, and what we have used.
    (setq reftex-tables-dirty nil)
!   (setq reftex-memory
!       (list reftex-label-alist
!             (get reftex-docstruct-symbol 'reftex-section-levels)
!             (get reftex-docstruct-symbol 'reftex-label-alist-style)
!             reftex-default-label-alist-entries
!             reftex-index-macros
!             (get reftex-docstruct-symbol 'reftex-index-macros-style)))
  
    ;; Compile information in reftex-label-alist
    (let ((all (reftex-uniquify-by-car
!             (reftex-splice-symbols-into-list
!              (append reftex-label-alist
!                      (get reftex-docstruct-symbol
!                           'reftex-label-alist-style)
!                      reftex-default-label-alist-entries)
!              reftex-label-alist-builtin)
!             '(nil)))
!       (all-index (reftex-uniquify-by-car
!                   (reftex-splice-symbols-into-list
!                    (append reftex-index-macros
!                            (get reftex-docstruct-symbol
!                                 'reftex-index-macros-style)
!                            '(default))
!                    reftex-index-macros-builtin)))
          entry env-or-mac typekeychar typekey prefix context word
          fmt reffmt labelfmt wordlist qh-list macros-with-labels
          nargs nlabel opt-args cell sum i
!       macro verify repeat nindex tag key toc-level toc-levels)
  
      (setq reftex-words-to-typekey-alist nil
            reftex-typekey-list nil
--- 874,907 ----
  
    ;; Record that we have done this, and what we have used.
    (setq reftex-tables-dirty nil)
!   (setq reftex-memory 
!         (list reftex-label-alist
!               (get reftex-docstruct-symbol 'reftex-section-levels)
!               (get reftex-docstruct-symbol 'reftex-label-alist-style)
!               reftex-default-label-alist-entries
!               reftex-index-macros
!               (get reftex-docstruct-symbol 'reftex-index-macros-style)))
  
    ;; Compile information in reftex-label-alist
    (let ((all (reftex-uniquify-by-car
!               (reftex-splice-symbols-into-list
!                (append reftex-label-alist
!                        (get reftex-docstruct-symbol
!                             'reftex-label-alist-style)
!                        reftex-default-label-alist-entries)
!                reftex-label-alist-builtin)
!               '(nil)))
!         (all-index (reftex-uniquify-by-car
!                     (reftex-splice-symbols-into-list
!                      (append reftex-index-macros 
!                              (get reftex-docstruct-symbol
!                                   'reftex-index-macros-style)
!                              '(default))
!                      reftex-index-macros-builtin)))
          entry env-or-mac typekeychar typekey prefix context word
          fmt reffmt labelfmt wordlist qh-list macros-with-labels
          nargs nlabel opt-args cell sum i
!         macro verify repeat nindex tag key toc-level toc-levels)
  
      (setq reftex-words-to-typekey-alist nil
            reftex-typekey-list nil
***************
*** 923,929 ****
                fmt (nth 2 entry)
                context (nth 3 entry)
                wordlist (nth 4 entry)
!             toc-level (nth 5 entry))
          (if (stringp wordlist)
              ;; This is before version 2.04 - convert to new format
              (setq wordlist (nthcdr 4 entry)))
--- 930,936 ----
                fmt (nth 2 entry)
                context (nth 3 entry)
                wordlist (nth 4 entry)
!               toc-level (nth 5 entry))
          (if (stringp wordlist)
              ;; This is before version 2.04 - convert to new format
              (setq wordlist (nthcdr 4 entry)))
***************
*** 935,1000 ****
            (setq fmt (list "\\label{%s}" fmt)))
          (setq labelfmt (car fmt)
                reffmt (nth 1 fmt))
!       ;; Note a new typekey
          (if typekey
              (add-to-list 'reftex-typekey-list typekey))
          (if (and typekey prefix
                   (not (assoc typekey reftex-typekey-to-prefix-alist)))
              (add-to-list 'reftex-typekey-to-prefix-alist
                           (cons typekey prefix)))
!       ;; Check if this is a macro or environment
          (cond
!        ((symbolp env-or-mac)
!         ;; A special parser function
!         (unless (fboundp env-or-mac)
!           (message "Warning: %s does not seem to be a valid function"
!                    env-or-mac))
            (setq nargs nil nlabel nil opt-args nil)
!         (add-to-list 'reftex-special-env-parsers env-or-mac)
!         (setq env-or-mac (symbol-name env-or-mac)))
           ((string-match "\\`\\\\" env-or-mac)
            ;; It's a macro
            (let ((result (reftex-parse-args env-or-mac)))
              (setq env-or-mac (or (first result) env-or-mac)
!                 nargs (second result)
                    nlabel (third result)
                    opt-args (fourth result))
              (if nlabel (add-to-list 'macros-with-labels env-or-mac)))
!         (if typekey (add-to-list 'reftex-label-mac-list env-or-mac)))
           (t
!         ;; It's an environment
            (setq nargs nil nlabel nil opt-args nil)
            (cond ((string= env-or-mac "any"))
                  ((string= env-or-mac ""))
                  ((string= env-or-mac "section"))
                  (t
                   (add-to-list 'reftex-label-env-list env-or-mac)
!                (if toc-level
!                    (let ((string (format "begin{%s}" env-or-mac)))
!                      (or (assoc string toc-levels)
!                          (push (cons string toc-level) toc-levels))))))))
!       ;; Translate some special context cases
!       (when (assq context reftex-default-context-regexps)
!         (setq context
!               (format
!                (cdr (assq context reftex-default-context-regexps))
!                (regexp-quote env-or-mac))))
!       ;; See if this is the first format for this typekey
          (and reffmt
               (not (assoc typekey reftex-typekey-to-format-alist))
               (push (cons typekey reffmt) reftex-typekey-to-format-alist))
!       ;; See if this is the first definition for this env-or-mac
          (and (not (string= env-or-mac "any"))
               (not (string= env-or-mac ""))
               (not (assoc env-or-mac reftex-env-or-mac-alist))
               (push (list env-or-mac typekey context labelfmt
!                        nargs nlabel opt-args)
                     reftex-env-or-mac-alist))
!       ;; Are the magic words regular expressions?  Quote normal words.
!       (if (eq (car wordlist) 'regexp)
!           (setq wordlist (cdr wordlist))
!         (setq wordlist (mapcar 'regexp-quote wordlist)))
!       ;; Remember the first association of each word.
          (while (stringp (setq word (pop wordlist)))
            (or (assoc word reftex-words-to-typekey-alist)
                (push (cons word typekey) reftex-words-to-typekey-alist)))
--- 942,1007 ----
            (setq fmt (list "\\label{%s}" fmt)))
          (setq labelfmt (car fmt)
                reffmt (nth 1 fmt))
!         ;; Note a new typekey
          (if typekey
              (add-to-list 'reftex-typekey-list typekey))
          (if (and typekey prefix
                   (not (assoc typekey reftex-typekey-to-prefix-alist)))
              (add-to-list 'reftex-typekey-to-prefix-alist
                           (cons typekey prefix)))
!         ;; Check if this is a macro or environment
          (cond
!          ((symbolp env-or-mac)
!           ;; A special parser function
!           (unless (fboundp env-or-mac)
!             (message "Warning: %s does not seem to be a valid function" 
!                      env-or-mac))
            (setq nargs nil nlabel nil opt-args nil)
!           (add-to-list 'reftex-special-env-parsers env-or-mac)
!           (setq env-or-mac (symbol-name env-or-mac)))
           ((string-match "\\`\\\\" env-or-mac)
            ;; It's a macro
            (let ((result (reftex-parse-args env-or-mac)))
              (setq env-or-mac (or (first result) env-or-mac)
!                   nargs (second result)
                    nlabel (third result)
                    opt-args (fourth result))
              (if nlabel (add-to-list 'macros-with-labels env-or-mac)))
!           (if typekey (add-to-list 'reftex-label-mac-list env-or-mac)))
           (t
!           ;; It's an environment
            (setq nargs nil nlabel nil opt-args nil)
            (cond ((string= env-or-mac "any"))
                  ((string= env-or-mac ""))
                  ((string= env-or-mac "section"))
                  (t
                   (add-to-list 'reftex-label-env-list env-or-mac)
!                  (if toc-level
!                      (let ((string (format "begin{%s}" env-or-mac)))
!                        (or (assoc string toc-levels)
!                            (push (cons string toc-level) toc-levels))))))))
!         ;; Translate some special context cases
!         (when (assq context reftex-default-context-regexps)
!           (setq context 
!                 (format 
!                  (cdr (assq context reftex-default-context-regexps))
!                  (regexp-quote env-or-mac))))
!         ;; See if this is the first format for this typekey
          (and reffmt
               (not (assoc typekey reftex-typekey-to-format-alist))
               (push (cons typekey reffmt) reftex-typekey-to-format-alist))
!         ;; See if this is the first definition for this env-or-mac
          (and (not (string= env-or-mac "any"))
               (not (string= env-or-mac ""))
               (not (assoc env-or-mac reftex-env-or-mac-alist))
               (push (list env-or-mac typekey context labelfmt
!                          nargs nlabel opt-args)
                     reftex-env-or-mac-alist))
!         ;; Are the magic words regular expressions?  Quote normal words.
!         (if (eq (car wordlist) 'regexp)
!             (setq wordlist (cdr wordlist))
!           (setq wordlist (mapcar 'regexp-quote wordlist)))
!         ;; Remember the first association of each word.
          (while (stringp (setq word (pop wordlist)))
            (or (assoc word reftex-words-to-typekey-alist)
                (push (cons word typekey) reftex-words-to-typekey-alist)))
***************
*** 1009,1018 ****
            (nreverse reftex-typekey-to-prefix-alist))
  
      ;; Prepare the typekey query prompt and help string.
!     (setq qh-list
!         (sort qh-list
!               (lambda (x1 x2)
!                 (string< (downcase (car x1)) (downcase (car x2))))))
      (setq reftex-type-query-prompt
            (concat "Label type: ["
                    (mapconcat (lambda(x) (format "%s" (car x)))
--- 1016,1025 ----
            (nreverse reftex-typekey-to-prefix-alist))
  
      ;; Prepare the typekey query prompt and help string.
!     (setq qh-list 
!           (sort qh-list
!                 (lambda (x1 x2)
!                   (string< (downcase (car x1)) (downcase (car x2))))))
      (setq reftex-type-query-prompt
            (concat "Label type: ["
                    (mapconcat (lambda(x) (format "%s" (car x)))
***************
*** 1020,1183 ****
                    "]"))
      ;; In the help string, we need to wrap lines...
      (setq reftex-type-query-help
!           (concat
!          "SELECT A LABEL TYPE:\n--------------------\n"
!          (mapconcat
!           (lambda(x)
!             (setq sum 0)
!             (format " [%s]   %s"
!                     (car x)
!                     (mapconcat (lambda(env)
!                                  (setq sum (+ sum (length env)))
!                                  (if (< sum 60)
!                                      env
!                                    (setq sum 0)
!                                    (concat "\n       " env)))
!                                (cdr x) " ")))
!           qh-list "\n")))
  
      ;; Convert magic words to regular expressions.  We make regular 
expressions
      ;; which allow for some chars from the ref format to be in the buffer.
      ;; These characters will be seen and removed.
      (setq reftex-words-to-typekey-alist
!         (mapcar
!          (lambda (x)
!            (setq word (car x)
!                  typekey (cdr x)
!                  fmt (cdr (assoc typekey reftex-typekey-to-format-alist)))
!            (setq word (concat "\\W\\(" word "[ \t\n\r]*\\)\\("))
!            (setq i 0)
!            (while (and (< i 10)   ; maximum number of format chars allowed
!                        (< i (length fmt))
!                        (not (member (aref fmt i) '(?%))))
!              (setq word (concat word "\\|" (regexp-quote
!                                             (substring fmt 0 (1+ i)))))
!              (incf i))
!            (cons (concat word "\\)\\=") typekey))
!          (nreverse reftex-words-to-typekey-alist)))
  
      ;; Parse the index macros
      (setq reftex-index-macro-alist nil
!         reftex-key-to-index-macro-alist nil
!         reftex-macros-with-index nil)
      (while all-index
        (setq entry (car all-index)
!           macro (car entry)
!           tag (nth 1 entry)
!           key (nth 2 entry)
!           prefix (or (nth 3 entry) "")
!           verify (nth 4 entry)
!           ;; For repeat, we need to be compatible with older code
!           ;; This information used to be given only for the default macro,
!           ;; but later we required to have it for *every* index macro
!           repeat (cond ((> (length entry) 5) (nth 5 entry))
!                        ((and (eq key (car reftex-index-default-macro))
!                              (> (length reftex-index-default-macro) 2))
!                         ;; User has old setting - respect it
!                         (nth 2 reftex-index-default-macro))
!                        (t t))
!           all-index (cdr all-index))
        (let ((result (reftex-parse-args macro)))
!       (setq macro (or (first result) macro)
!             nargs (second result)
!             nindex (third result)
!             opt-args (fourth result))
!       (unless (member macro reftex-macros-with-index)
!         ;;           0     1    2      3     4     5       6        7
!         (push (list macro tag prefix verify nargs nindex opt-args repeat)
!               reftex-index-macro-alist)
!         (or (assoc key reftex-key-to-index-macro-alist)
!             (push (list key macro) reftex-key-to-index-macro-alist))
!         (push macro reftex-macros-with-index))))
      ;; Make the prompt and help string for index macros query
      (setq reftex-key-to-index-macro-alist
!         (sort reftex-key-to-index-macro-alist
!               (lambda (a b) (< (downcase (car a)) (downcase (car b))))))
!     (setq reftex-query-index-macro-prompt
!         (concat "Index macro: ["
!                 (mapconcat (lambda (x) (char-to-string (car x)))
!                            reftex-key-to-index-macro-alist "")
!                 "]"))
      (setq i 0
!         reftex-query-index-macro-help
!         (concat
!          "SELECT A MACRO:\n---------------\n"
!          (mapconcat
!           (lambda(x)
!             (format "[%c] %-20.20s%s" (car x) (nth 1 x)
!                     (if (= 0 (mod (incf i) 3)) "\n" "")))
!           reftex-key-to-index-macro-alist "")))
  
      ;; Make the full list of section levels
      (setq reftex-section-levels-all
!         (append toc-levels
!                 (get reftex-docstruct-symbol 'reftex-section-levels)
!                 reftex-section-levels))
  
      ;; Calculate the regular expressions
      (let* (
! ;        (wbol "\\(\\`\\|[\n\r]\\)[ \t]*")
!          (wbol "\\(^\\)[ \t]*")  ; Need to keep the empty group because
!                                 ;;; because match number are hard coded
!          (label-re "\\\\label{\\([^}]*\\)}")
!          (include-re (concat wbol
!                              "\\\\\\("
!                              (mapconcat 'identity
!                                         reftex-include-file-commands "\\|")
!                              "\\)[{ \t]+\\([^} \t\n\r]+\\)"))
!          (section-re
!           (concat wbol "\\\\\\("
!                   (mapconcat (lambda (x) (regexp-quote (car x)))
!                              reftex-section-levels-all "\\|")
!                   "\\)\\*?\\(\\[[^]]*\\]\\)?[[{ \t\r\n]"))
!          (appendix-re (concat wbol "\\(\\\\appendix\\)"))
!          (macro-re
!           (if macros-with-labels
!               (concat "\\("
!                       (mapconcat 'regexp-quote macros-with-labels "\\|")
!                       "\\)[[{]")
!             ""))
!          (index-re
!           (concat "\\("
!                   (mapconcat 'regexp-quote reftex-macros-with-index "\\|")
!                   "\\)[[{]"))
!          (find-index-re-format
!           (concat "\\("
!                   (mapconcat 'regexp-quote reftex-macros-with-index "\\|")
!                   "\\)\\([[{][^]}]*[]}]\\)*[[{]\\(%s\\)[]}]"))
!          (find-label-re-format
!           (concat "\\("
!                   (mapconcat 'regexp-quote (append '("\\label")
!                                                    macros-with-labels) "\\|")
!                   "\\)\\([[{][^]}]*[]}]\\)*[[{]\\(%s\\)[]}]"))
!          (index-level-re
!           (regexp-quote (nth 0 reftex-index-special-chars)))
!          (index-key-end-re ;; ^]- not allowed
!           (concat "[^" (nth 3 reftex-index-special-chars) "]"
!                   "[" (nth 1 reftex-index-special-chars)
!                   (nth 2 reftex-index-special-chars) "]"))
!          )
        (setq reftex-section-regexp section-re
              reftex-section-or-include-regexp
              (concat section-re "\\|" include-re)
              reftex-everything-regexp
              (concat label-re "\\|" section-re "\\|" include-re
!                   "\\|" appendix-re
!                   "\\|" index-re
                      (if macros-with-labels "\\|" "") macro-re)
              reftex-everything-regexp-no-index
              (concat label-re "\\|" section-re "\\|" include-re
!                   "\\|" appendix-re
!                   "\\|" "\\(\\\\6\\\\3\\\\1\\)" ; This is unlikely to match
                      (if macros-with-labels "\\|" "") macro-re)
!           reftex-index-re index-re
!           reftex-index-level-re index-level-re
!           reftex-index-key-end-re index-key-end-re
!           reftex-macros-with-labels macros-with-labels
!           reftex-find-index-entry-regexp-format find-index-re-format
              reftex-find-label-regexp-format find-label-re-format
!           reftex-find-label-regexp-format2
!           "\\([]} \t\n\r]\\)\\([[{]\\)\\(%s\\)[]}]")
        (message "Compiling label environment definitions...done")))
    (put reftex-docstruct-symbol 'reftex-cache
         (mapcar 'symbol-value reftex-cache-variables)))
--- 1027,1190 ----
                    "]"))
      ;; In the help string, we need to wrap lines...
      (setq reftex-type-query-help
!           (concat 
!            "SELECT A LABEL TYPE:\n--------------------\n"
!            (mapconcat
!             (lambda(x)
!               (setq sum 0)
!               (format " [%s]   %s"
!                       (car x)
!                       (mapconcat (lambda(env)
!                                    (setq sum (+ sum (length env)))
!                                    (if (< sum 60)
!                                        env
!                                      (setq sum 0)
!                                      (concat "\n       " env)))
!                                  (cdr x) " ")))
!             qh-list "\n")))
  
      ;; Convert magic words to regular expressions.  We make regular 
expressions
      ;; which allow for some chars from the ref format to be in the buffer.
      ;; These characters will be seen and removed.
      (setq reftex-words-to-typekey-alist
!           (mapcar 
!            (lambda (x)
!              (setq word (car x)
!                    typekey (cdr x)
!                    fmt (cdr (assoc typekey reftex-typekey-to-format-alist)))
!              (setq word (concat "\\W\\(" word "[ \t\n\r]*\\)\\("))
!              (setq i 0)
!              (while (and (< i 10)   ; maximum number of format chars allowed
!                          (< i (length fmt))
!                          (not (member (aref fmt i) '(?%))))
!                (setq word (concat word "\\|" (regexp-quote
!                                               (substring fmt 0 (1+ i)))))
!                (incf i))
!              (cons (concat word "\\)\\=") typekey))
!            (nreverse reftex-words-to-typekey-alist)))
  
      ;; Parse the index macros
      (setq reftex-index-macro-alist nil
!           reftex-key-to-index-macro-alist nil
!           reftex-macros-with-index nil)
      (while all-index
        (setq entry (car all-index)
!             macro (car entry)
!             tag (nth 1 entry)
!             key (nth 2 entry)
!             prefix (or (nth 3 entry) "")
!             verify (nth 4 entry)
!             ;; For repeat, we need to be compatible with older code
!             ;; This information used to be given only for the default macro,
!             ;; but later we required to have it for *every* index macro
!             repeat (cond ((> (length entry) 5) (nth 5 entry))
!                          ((and (eq key (car reftex-index-default-macro))
!                                (> (length reftex-index-default-macro) 2))
!                           ;; User has old setting - respect it
!                           (nth 2 reftex-index-default-macro))
!                          (t t))
!             all-index (cdr all-index))
        (let ((result (reftex-parse-args macro)))
!         (setq macro (or (first result) macro)
!               nargs (second result)
!               nindex (third result)
!               opt-args (fourth result))
!         (unless (member macro reftex-macros-with-index)
!           ;;           0     1    2      3     4     5       6        7
!           (push (list macro tag prefix verify nargs nindex opt-args repeat)
!                 reftex-index-macro-alist)
!           (or (assoc key reftex-key-to-index-macro-alist)
!               (push (list key macro) reftex-key-to-index-macro-alist))
!           (push macro reftex-macros-with-index))))
      ;; Make the prompt and help string for index macros query
      (setq reftex-key-to-index-macro-alist
!           (sort reftex-key-to-index-macro-alist
!                 (lambda (a b) (< (downcase (car a)) (downcase (car b))))))
!     (setq reftex-query-index-macro-prompt 
!           (concat "Index macro: ["
!                   (mapconcat (lambda (x) (char-to-string (car x)))
!                              reftex-key-to-index-macro-alist "")
!                   "]"))
      (setq i 0
!           reftex-query-index-macro-help
!           (concat 
!            "SELECT A MACRO:\n---------------\n"
!            (mapconcat
!             (lambda(x)
!               (format "[%c] %-20.20s%s" (car x) (nth 1 x) 
!                       (if (= 0 (mod (incf i) 3)) "\n" "")))
!             reftex-key-to-index-macro-alist "")))
  
      ;; Make the full list of section levels
      (setq reftex-section-levels-all
!           (append toc-levels
!                   (get reftex-docstruct-symbol 'reftex-section-levels)
!                   reftex-section-levels))
  
      ;; Calculate the regular expressions
      (let* (
! ;          (wbol "\\(\\`\\|[\n\r]\\)[ \t]*")
!            (wbol "\\(^\\)[ \t]*")  ; Need to keep the empty group because
!                                   ;;; because match number are hard coded  
!            (label-re "\\\\label{\\([^}]*\\)}")
!            (include-re (concat wbol 
!                                "\\\\\\("
!                                (mapconcat 'identity 
!                                           reftex-include-file-commands "\\|")
!                                "\\)[{ \t]+\\([^} \t\n\r]+\\)"))
!            (section-re
!             (concat wbol "\\\\\\("
!                     (mapconcat (lambda (x) (regexp-quote (car x)))
!                                reftex-section-levels-all "\\|")
!                     "\\)\\*?\\(\\[[^]]*\\]\\)?[[{ \t\r\n]"))
!            (appendix-re (concat wbol "\\(\\\\appendix\\)"))
!            (macro-re
!             (if macros-with-labels
!                 (concat "\\("
!                         (mapconcat 'regexp-quote macros-with-labels "\\|")
!                         "\\)[[{]")
!               ""))
!            (index-re
!             (concat "\\("
!                     (mapconcat 'regexp-quote reftex-macros-with-index "\\|")
!                     "\\)[[{]"))
!            (find-index-re-format
!             (concat "\\("
!                     (mapconcat 'regexp-quote reftex-macros-with-index "\\|")
!                     "\\)\\([[{][^]}]*[]}]\\)*[[{]\\(%s\\)[]}]"))
!            (find-label-re-format
!             (concat "\\("
!                     (mapconcat 'regexp-quote (append '("\\label")
!                                                      macros-with-labels) 
"\\|")
!                     "\\)\\([[{][^]}]*[]}]\\)*[[{]\\(%s\\)[]}]"))
!            (index-level-re
!             (regexp-quote (nth 0 reftex-index-special-chars)))
!            (index-key-end-re ;; ^]- not allowed
!             (concat "[^" (nth 3 reftex-index-special-chars) "]"
!                     "[" (nth 1 reftex-index-special-chars)
!                     (nth 2 reftex-index-special-chars) "]"))
!            )
        (setq reftex-section-regexp section-re
              reftex-section-or-include-regexp
              (concat section-re "\\|" include-re)
              reftex-everything-regexp
              (concat label-re "\\|" section-re "\\|" include-re
!                     "\\|" appendix-re
!                     "\\|" index-re
                      (if macros-with-labels "\\|" "") macro-re)
              reftex-everything-regexp-no-index
              (concat label-re "\\|" section-re "\\|" include-re
!                     "\\|" appendix-re
!                     "\\|" "\\(\\\\6\\\\3\\\\1\\)" ; This is unlikely to match
                      (if macros-with-labels "\\|" "") macro-re)
!             reftex-index-re index-re
!             reftex-index-level-re index-level-re
!             reftex-index-key-end-re index-key-end-re
!             reftex-macros-with-labels macros-with-labels
!             reftex-find-index-entry-regexp-format find-index-re-format
              reftex-find-label-regexp-format find-label-re-format
!             reftex-find-label-regexp-format2 
!             "\\([]} \t\n\r]\\)\\([[{]\\)\\(%s\\)[]}]")
        (message "Compiling label environment definitions...done")))
    (put reftex-docstruct-symbol 'reftex-cache
         (mapcar 'symbol-value reftex-cache-variables)))
***************
*** 1195,1202 ****
              (when (eq ?\[ (string-to-char args))
                (push cnt opt-list))
              (when (and (match-end 1)
!                      (not nlabel))
!             (setq nlabel cnt))
              (setq args (substring args (match-end 0))))
            (list must-match cnt nlabel opt-list)))
      nil))
--- 1202,1209 ----
              (when (eq ?\[ (string-to-char args))
                (push cnt opt-list))
              (when (and (match-end 1)
!                        (not nlabel))
!               (setq nlabel cnt))
              (setq args (substring args (match-end 0))))
            (list must-match cnt nlabel opt-list)))
      nil))
***************
*** 1220,1233 ****
    (reftex-ensure-compiled-variables)
  
    (when (or (null (symbol-value reftex-docstruct-symbol))
!           (member rescan '(t 1 (4) (16))))
      ;; The docstruct will change: Remove selection buffers.
      (save-excursion
        (reftex-erase-buffer "*toc*")
        (reftex-erase-all-selection-and-index-buffers)))
  
    (if (and (null (symbol-value reftex-docstruct-symbol))
!          (not (member rescan '(t 1 (4) (16))))
             reftex-save-parse-info)
        ;; Try to read the stuff from a file
        (reftex-access-parse-file 'read))
--- 1227,1240 ----
    (reftex-ensure-compiled-variables)
  
    (when (or (null (symbol-value reftex-docstruct-symbol))
!             (member rescan '(t 1 (4) (16))))
      ;; The docstruct will change: Remove selection buffers.
      (save-excursion
        (reftex-erase-buffer "*toc*")
        (reftex-erase-all-selection-and-index-buffers)))
  
    (if (and (null (symbol-value reftex-docstruct-symbol))
!            (not (member rescan '(t 1 (4) (16))))
             reftex-save-parse-info)
        ;; Try to read the stuff from a file
        (reftex-access-parse-file 'read))
***************
*** 1248,1254 ****
    (and (symbolp reftex-docstruct-symbol)
         (symbol-value reftex-docstruct-symbol)
         t))
! 
  (defun reftex-silence-toc-markers (list n)
    ;; Set all toc markers in the first N entries in list to nil
    (while (and list (> (decf n) -1))
--- 1255,1261 ----
    (and (symbolp reftex-docstruct-symbol)
         (symbol-value reftex-docstruct-symbol)
         t))
!   
  (defun reftex-silence-toc-markers (list n)
    ;; Set all toc markers in the first N entries in list to nil
    (while (and list (> (decf n) -1))
***************
*** 1261,1272 ****
    "Perform ACTION on the parse file (the .rel file).
  Valid actions are: readable, restore, read, kill, write."
    (let* ((list (symbol-value reftex-docstruct-symbol))
!        (docstruct-symbol reftex-docstruct-symbol)
           (master (reftex-TeX-master-file))
!        (enable-local-variables nil)
           (file (if (string-match "\\.[a-zA-Z]+\\'" master)
!                    (concat (substring master 0 (match-beginning 0))
!                          reftex-parse-file-extension)
                   (concat master reftex-parse-file-extension))))
      (cond
       ((eq action 'readable)
--- 1268,1279 ----
    "Perform ACTION on the parse file (the .rel file).
  Valid actions are: readable, restore, read, kill, write."
    (let* ((list (symbol-value reftex-docstruct-symbol))
!          (docstruct-symbol reftex-docstruct-symbol)
           (master (reftex-TeX-master-file))
!          (enable-local-variables nil)
           (file (if (string-match "\\.[a-zA-Z]+\\'" master)
!                    (concat (substring master 0 (match-beginning 0)) 
!                            reftex-parse-file-extension)
                   (concat master reftex-parse-file-extension))))
      (cond
       ((eq action 'readable)
***************
*** 1278,1308 ****
            (reftex-tie-multifile-symbols))
        (if (file-exists-p file)
            ;; load the file and return t for success
!         (condition-case nil
!             (progn (load-file file) t)
!           (error (set reftex-docstruct-symbol nil)
!                  (error "Error while loading file %s" file)))
          ;; Throw an exception if the file does not exist
          (error "No restore file %s" file)))
       ((eq action 'read)
        (put reftex-docstruct-symbol 'modified nil)
        (if (file-exists-p file)
            ;; load the file and return t for success
!         (condition-case nil
!             (progn
!               (load-file file)
!               (reftex-check-parse-consistency)
!               t)
!           (error (message "Error while restoring file %s" file)
!                  (set reftex-docstruct-symbol nil)
!                  nil))
          ;; return nil for failure, but no exception
          nil))
       ((eq action 'kill)
        ;; Remove the file
        (when (and (file-exists-p file) (file-writable-p file))
!       (message "Unlinking file %s" file)
!       (delete-file file)))
       (t
        (put docstruct-symbol 'modified nil)
        (save-excursion
--- 1285,1315 ----
            (reftex-tie-multifile-symbols))
        (if (file-exists-p file)
            ;; load the file and return t for success
!           (condition-case nil
!               (progn (load-file file) t)
!             (error (set reftex-docstruct-symbol nil)
!                    (error "Error while loading file %s" file)))
          ;; Throw an exception if the file does not exist
          (error "No restore file %s" file)))
       ((eq action 'read)
        (put reftex-docstruct-symbol 'modified nil)
        (if (file-exists-p file)
            ;; load the file and return t for success
!           (condition-case nil
!               (progn
!                 (load-file file)
!                 (reftex-check-parse-consistency)
!                 t)
!             (error (message "Error while restoring file %s" file)
!                    (set reftex-docstruct-symbol nil)
!                    nil))
          ;; return nil for failure, but no exception
          nil))
       ((eq action 'kill)
        ;; Remove the file
        (when (and (file-exists-p file) (file-writable-p file))
!         (message "Unlinking file %s" file)
!         (delete-file file)))
       (t
        (put docstruct-symbol 'modified nil)
        (save-excursion
***************
*** 1318,1337 ****
                (insert "(set reftex-docstruct-symbol '(\n\n")
                (let ((standard-output (current-buffer)))
                  (mapcar
!                (lambda (x)
!                  (cond ((eq (car x) 'toc)
!                         ;; A toc entry. Do not save the marker.
!                         ;; Save the markers  position at position 8
!                         (print (list 'toc "toc" (nth 2 x) (nth 3 x)
!                                      nil (nth 5 x) (nth 6 x) (nth 7 x)
!                                      (or (and (markerp (nth 4 x))
!                                               (marker-position (nth 4 x)))
!                                          (nth 8 x)))))
!                        ((and (not (eq t reftex-support-index))
!                              (eq (car x) 'index))
!                         ;; Don't save index entries
!                         )
!                        (t (print x))))
                   list))
                (insert "))\n\n")
                (save-buffer 0)
--- 1325,1344 ----
                (insert "(set reftex-docstruct-symbol '(\n\n")
                (let ((standard-output (current-buffer)))
                  (mapcar
!                  (lambda (x)
!                    (cond ((eq (car x) 'toc)
!                           ;; A toc entry. Do not save the marker.
!                           ;; Save the markers  position at position 8
!                           (print (list 'toc "toc" (nth 2 x) (nth 3 x)
!                                        nil (nth 5 x) (nth 6 x) (nth 7 x)
!                                        (or (and (markerp (nth 4 x))
!                                                 (marker-position (nth 4 x)))
!                                            (nth 8 x)))))
!                          ((and (not (eq t reftex-support-index))
!                                (eq (car x) 'index))
!                           ;; Don't save index entries
!                           )
!                          (t (print x))))
                   list))
                (insert "))\n\n")
                (save-buffer 0)
***************
*** 1344,1372 ****
  
    ;; Check if the master is the same: when moving a document, this will see 
it.
    (let* ((real-master (reftex-TeX-master-file))
!        (parsed-master
!         (nth 1 (assq 'bof (symbol-value reftex-docstruct-symbol)))))
      (unless (string= (file-truename real-master) (file-truename 
parsed-master))
        (message "Master file name in load file is different: %s versus %s"
!              parsed-master real-master)
        (error "Master file name error")))
  
    ;; Check for the existence of all document files
  ;;;  (let* ((all (symbol-value reftex-docstruct-symbol)))
  ;;;    (while all
  ;;;      (when (and (eq (car (car all)) 'bof)
! ;;;            (not (file-regular-p (nth 1 (car all)))))
! ;;;   (message "File %s in saved parse info not avalable" (cdr (car all)))
! ;;;   (error "File not found"))
  ;;;      (setq all (cdr all))))
    )
  
  (defun reftex-select-external-document (xr-alist xr-index)
    ;; Return index of an external document.
    (let* ((len (length xr-alist)) (highest (1- (+ ?0 len)))
!        (prompt (format "[%c-%c] Select    TAB: Read prefix with completion"
!                        ?0 highest))
!        key prefix)
      (cond
       ((= len 1)
        (message "No external documents available")
--- 1351,1379 ----
  
    ;; Check if the master is the same: when moving a document, this will see 
it.
    (let* ((real-master (reftex-TeX-master-file))
!          (parsed-master 
!           (nth 1 (assq 'bof (symbol-value reftex-docstruct-symbol)))))
      (unless (string= (file-truename real-master) (file-truename 
parsed-master))
        (message "Master file name in load file is different: %s versus %s"
!                parsed-master real-master)
        (error "Master file name error")))
  
    ;; Check for the existence of all document files
  ;;;  (let* ((all (symbol-value reftex-docstruct-symbol)))
  ;;;    (while all
  ;;;      (when (and (eq (car (car all)) 'bof)
! ;;;              (not (file-regular-p (nth 1 (car all)))))
! ;;;     (message "File %s in saved parse info not avalable" (cdr (car all)))
! ;;;     (error "File not found"))
  ;;;      (setq all (cdr all))))
    )
  
  (defun reftex-select-external-document (xr-alist xr-index)
    ;; Return index of an external document.
    (let* ((len (length xr-alist)) (highest (1- (+ ?0 len)))
!          (prompt (format "[%c-%c] Select    TAB: Read prefix with completion" 
!                          ?0 highest))
!          key prefix)
      (cond
       ((= len 1)
        (message "No external documents available")
***************
*** 1375,1401 ****
        (- 1 xr-index))
       (t
        (save-excursion
!       (let* ((length (apply 'max (mapcar
!                                   (lambda(x) (length (car x))) xr-alist)))
!              (fmt (format " [%%c]  %%-%ds  %%s\n" length))
!              (n (1- ?0)))
!         (setq key
!               (reftex-select-with-char
!                prompt
!                (concat
!                 "SELECT EXTERNAL DOCUMENT\n------------------------\n"
!                 (mapconcat
!                  (lambda (x)
!                    (format fmt (incf n) (or (car x) "")
!                            (abbreviate-file-name (cdr x))))
!                  xr-alist ""))
!                nil t))
!         (cond
!          ((and (>= key ?0) (<= key highest)) (- key ?0))
!          ((= key ?\C-i)
!           (setq prefix (completing-read "Prefix: " xr-alist nil t))
!           (- len (length (memq (assoc prefix xr-alist) xr-alist))))
!          (t (error "Illegal document selection [%c]" key)))))))))
  
  ;;; =========================================================================
  ;;;
--- 1382,1408 ----
        (- 1 xr-index))
       (t
        (save-excursion
!         (let* ((length (apply 'max (mapcar 
!                                     (lambda(x) (length (car x))) xr-alist)))
!                (fmt (format " [%%c]  %%-%ds  %%s\n" length))
!                (n (1- ?0)))
!           (setq key
!                 (reftex-select-with-char
!                  prompt
!                  (concat
!                   "SELECT EXTERNAL DOCUMENT\n------------------------\n"
!                   (mapconcat
!                    (lambda (x) 
!                      (format fmt (incf n) (or (car x) "")
!                              (abbreviate-file-name (cdr x))))
!                    xr-alist ""))
!                  nil t))
!           (cond
!            ((and (>= key ?0) (<= key highest)) (- key ?0))
!            ((= key ?\C-i)
!             (setq prefix (completing-read "Prefix: " xr-alist nil t))
!             (- len (length (memq (assoc prefix xr-alist) xr-alist))))
!            (t (error "Illegal document selection [%c]" key)))))))))
  
  ;;; =========================================================================
  ;;;
***************
*** 1407,1471 ****
  try first the default extension and only then the naked file name.
  When DIE is non-nil, throw an error if file not found."
    (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t)))
!        (extensions (cdr (assoc type reftex-file-extensions)))
!        (def-ext (car extensions))
!        (ext-re (concat "\\("
!                        (mapconcat 'regexp-quote extensions "\\|")
!                        "\\)\\'"))
!        (files (if (string-match ext-re file)
!                   (cons file nil)
!                 (cons (concat file def-ext) file)))
!        path old-path file1)
      (cond
       ((file-name-absolute-p file)
!       (setq file1
!           (or
!            (and (car files) (file-regular-p (car files)) (car files))
!            (and (cdr files) (file-regular-p (cdr files)) (cdr files)))))
       ((and reftex-use-external-file-finders
!          (assoc type reftex-external-file-finders))
        (setq file1 (reftex-find-file-externally file type master-dir)))
       (t
        (while (and (null file1) rec-values)
!       (setq path (reftex-access-search-path
!                   type (pop rec-values) master-dir file))
!       (if (or (null old-path)
!               (not (eq old-path path)))
!           (setq old-path path
!                 path (cons master-dir path)
!                 file1 (or (and (car files)
!                                (reftex-find-file-on-path
!                                 (car files) path master-dir))
!                           (and (cdr files)
!                                (reftex-find-file-on-path
!                                 (cdr files) path master-dir))))))))
      (cond (file1 file1)
!         (die (error "No such file: %s" file) nil)
!         (t (message "No such file: %s (ignored)" file) nil))))
  
  (defun reftex-find-file-externally (file type &optional master-dir)
    ;; Use external program to find FILE.
    ;; The program is taken from `reftex-external-file-finders'.
    ;; Interprete relative path definitions starting from MASTER-DIR.
    (let ((default-directory (or master-dir default-directory))
!       (prg (cdr (assoc type reftex-external-file-finders)))
!       out)
      (if (string-match "%f" prg)
!       (setq prg (replace-match file t t prg)))
      (setq out (apply 'reftex-process-string (split-string prg)))
      (if (string-match "[ \t\n]+\\'" out)     ; chomp
!       (setq out (replace-match "" nil nil out)))
      (cond ((equal out "") nil)
!         ((file-regular-p out) (expand-file-name out master-dir))
!         (t nil))))
  
  (defun reftex-process-string (program &rest args)
    "Execute PROGRAM with arguments ARGS and return its STDOUT as a string."
    (let ((calling-dir default-directory))  ; remember default directory
      (with-output-to-string
        (with-current-buffer standard-output
!       (let ((default-directory calling-dir)) ; set default directory
!         (apply 'call-process program nil '(t nil) nil args))))))
  
  (defun reftex-access-search-path (type &optional recurse master-dir file)
    ;; Access path from environment variables.  TYPE is either "tex" or "bib".
--- 1414,1478 ----
  try first the default extension and only then the naked file name.
  When DIE is non-nil, throw an error if file not found."
    (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t)))
!          (extensions (cdr (assoc type reftex-file-extensions)))
!          (def-ext (car extensions))
!          (ext-re (concat "\\(" 
!                          (mapconcat 'regexp-quote extensions "\\|")
!                          "\\)\\'"))
!          (files (if (string-match ext-re file)
!                     (cons file nil)
!                   (cons (concat file def-ext) file)))
!          path old-path file1)
      (cond
       ((file-name-absolute-p file)
!       (setq file1 
!             (or 
!              (and (car files) (file-regular-p (car files)) (car files))
!              (and (cdr files) (file-regular-p (cdr files)) (cdr files)))))
       ((and reftex-use-external-file-finders
!            (assoc type reftex-external-file-finders))
        (setq file1 (reftex-find-file-externally file type master-dir)))
       (t
        (while (and (null file1) rec-values)
!         (setq path (reftex-access-search-path
!                     type (pop rec-values) master-dir file))
!         (if (or (null old-path)
!                 (not (eq old-path path)))
!             (setq old-path path
!                   path (cons master-dir path)
!                   file1 (or (and (car files)
!                                  (reftex-find-file-on-path 
!                                   (car files) path master-dir))
!                             (and (cdr files)
!                                  (reftex-find-file-on-path 
!                                   (cdr files) path master-dir))))))))
      (cond (file1 file1)
!           (die (error "No such file: %s" file) nil)
!           (t (message "No such file: %s (ignored)" file) nil))))
  
  (defun reftex-find-file-externally (file type &optional master-dir)
    ;; Use external program to find FILE.
    ;; The program is taken from `reftex-external-file-finders'.
    ;; Interprete relative path definitions starting from MASTER-DIR.
    (let ((default-directory (or master-dir default-directory))
!         (prg (cdr (assoc type reftex-external-file-finders)))
!         out)
      (if (string-match "%f" prg)
!         (setq prg (replace-match file t t prg)))
      (setq out (apply 'reftex-process-string (split-string prg)))
      (if (string-match "[ \t\n]+\\'" out)     ; chomp
!         (setq out (replace-match "" nil nil out)))
      (cond ((equal out "") nil)
!           ((file-regular-p out) (expand-file-name out master-dir))
!           (t nil))))
  
  (defun reftex-process-string (program &rest args)
    "Execute PROGRAM with arguments ARGS and return its STDOUT as a string."
    (let ((calling-dir default-directory))  ; remember default directory
      (with-output-to-string
        (with-current-buffer standard-output
!         (let ((default-directory calling-dir)) ; set default directory
!           (apply 'call-process program nil '(t nil) nil args))))))
  
  (defun reftex-access-search-path (type &optional recurse master-dir file)
    ;; Access path from environment variables.  TYPE is either "tex" or "bib".
***************
*** 1479,1529 ****
      (when (null (get pathvar 'status))
        ;; Get basic path
        (set pathvar
!          (reftex-uniq
!           (reftex-parse-colon-path
!            (mapconcat
!             (lambda(x)
!               (if (string-match "^!" x)
!                   (apply 'reftex-process-string
!                          (split-string (substring x 1)))
!                 (or (getenv x) x)))
!             ;; For consistency, the next line should look like this:
!             ;;  (cdr (assoc type reftex-path-environment))
!             ;; However, historically we have separate options for the
!             ;; environment variables, so we have to do this:
!             (symbol-value (intern (concat "reftex-" type
!                                           "path-environment-variables")))
!             path-separator))))
        (put pathvar 'status 'split)
        ;; Check if we have recursive elements
        (let ((path (symbol-value pathvar)) dir rec)
!       (while (setq dir (pop path))
!         (when (string= (substring dir -2) "//")
!           (if (file-name-absolute-p dir)
!               (setq rec (or rec 'absolute))
!             (setq rec 'relative))))
!       (put pathvar 'rec-type rec)))
  
      (if recurse
!       ;; Return the recursive expansion of the path
!       (cond
!        ((not (get pathvar 'rec-type))
!         ;; Path does not contain recursive elements - use simple path
!         (symbol-value pathvar))
!        ((or (not (get pathvar 'recursive-path))
!             (and (eq (get pathvar 'rec-type) 'relative)
!                  (not (equal master-dir (get pathvar 'master-dir)))))
!         ;; Either: We don't have a recursive expansion yet.
!         ;; or:     Relative recursive path elements need to be expanded
!         ;;         relative to new default directory
!         (message "Expanding search path to find %s file: %s ..." type file)
!         (put pathvar 'recursive-path
!              (reftex-expand-path (symbol-value pathvar) master-dir))
!         (put pathvar 'master-dir master-dir)
!         (get pathvar 'recursive-path))
!        (t
!         ;; Recursive path computed earlier is still OK.
!         (get pathvar 'recursive-path)))
        ;; The simple path was requested
        (symbol-value pathvar))))
  
--- 1486,1536 ----
      (when (null (get pathvar 'status))
        ;; Get basic path
        (set pathvar
!            (reftex-uniq
!             (reftex-parse-colon-path
!              (mapconcat
!               (lambda(x) 
!                 (if (string-match "^!" x)
!                     (apply 'reftex-process-string
!                            (split-string (substring x 1)))
!                   (or (getenv x) x)))
!               ;; For consistency, the next line should look like this:
!               ;;  (cdr (assoc type reftex-path-environment))
!               ;; However, historically we have separate options for the
!               ;; environment variables, so we have to do this:
!               (symbol-value (intern (concat "reftex-" type 
!                                             "path-environment-variables")))
!               path-separator))))
        (put pathvar 'status 'split)
        ;; Check if we have recursive elements
        (let ((path (symbol-value pathvar)) dir rec)
!         (while (setq dir (pop path))
!           (when (string= (substring dir -2) "//")
!             (if (file-name-absolute-p dir)
!                 (setq rec (or rec 'absolute))
!               (setq rec 'relative))))
!         (put pathvar 'rec-type rec)))
  
      (if recurse
!         ;; Return the recursive expansion of the path
!         (cond
!          ((not (get pathvar 'rec-type))
!           ;; Path does not contain recursive elements - use simple path
!           (symbol-value pathvar))
!          ((or (not (get pathvar 'recursive-path))
!               (and (eq (get pathvar 'rec-type) 'relative)
!                    (not (equal master-dir (get pathvar 'master-dir)))))
!           ;; Either: We don't have a recursive expansion yet.
!           ;; or:     Relative recursive path elements need to be expanded
!           ;;         relative to new default directory
!           (message "Expanding search path to find %s file: %s ..." type file)
!           (put pathvar 'recursive-path 
!                (reftex-expand-path (symbol-value pathvar) master-dir))
!           (put pathvar 'master-dir master-dir)
!           (get pathvar 'recursive-path))
!          (t 
!           ;; Recursive path computed earlier is still OK.
!           (get pathvar 'recursive-path)))
        ;; The simple path was requested
        (symbol-value pathvar))))
  
***************
*** 1533,1547 ****
    (catch 'exit
      (when (file-name-absolute-p file)
        (if (file-regular-p file)
!         (throw 'exit file)
!       (throw 'exit nil)))
      (let* ((thepath path) file1 dir)
        (while (setq dir (pop thepath))
!       (when (string= (substring dir -2) "//")
!         (setq dir (substring dir 0 -1)))
!       (setq file1 (expand-file-name file (expand-file-name dir def-dir)))
!       (if (file-regular-p file1)
!           (throw 'exit file1)))
        ;; No such file
        nil)))
  
--- 1540,1554 ----
    (catch 'exit
      (when (file-name-absolute-p file)
        (if (file-regular-p file)
!           (throw 'exit file)
!         (throw 'exit nil)))
      (let* ((thepath path) file1 dir)
        (while (setq dir (pop thepath))
!         (when (string= (substring dir -2) "//")
!           (setq dir (substring dir 0 -1)))
!         (setq file1 (expand-file-name file (expand-file-name dir def-dir)))
!         (if (file-regular-p file1)
!             (throw 'exit file1)))
        ;; No such file
        nil)))
  
***************
*** 1550,1557 ****
    ;; Trailing ! or !! will be converted into `//' (emTeX convention)
    (mapcar
     (lambda (dir)
!      (if (string-match "\\(//+\\|/*!+\\)\\'" dir)
!        (setq dir (replace-match "//" t t dir)))
       (file-name-as-directory dir))
     (delete "" (split-string path (concat path-separator "+")))))
  
--- 1557,1564 ----
    ;; Trailing ! or !! will be converted into `//' (emTeX convention)
    (mapcar
     (lambda (dir)
!      (if (string-match "\\(//+\\|/*!+\\)\\'" dir) 
!          (setq dir (replace-match "//" t t dir)))
       (file-name-as-directory dir))
     (delete "" (split-string path (concat path-separator "+")))))
  
***************
*** 1561,1575 ****
    (let (path1 dir recursive)
      (while (setq dir (pop path))
        (if (setq recursive (string= (substring dir -2) "//"))
!         (setq dir (substring dir 0 -1)))
        (if (and recursive
!              (not (file-name-absolute-p dir)))
!         (setq dir (expand-file-name dir default-dir)))
        (if recursive
!         ;; Expand recursively
!         (setq path1 (append (reftex-recursive-directory-list dir) path1))
!       ;; Keep unchanged
!       (push dir path1)))
      (nreverse path1)))
  
  (defun reftex-recursive-directory-list (dir)
--- 1568,1582 ----
    (let (path1 dir recursive)
      (while (setq dir (pop path))
        (if (setq recursive (string= (substring dir -2) "//"))
!           (setq dir (substring dir 0 -1)))
        (if (and recursive
!                (not (file-name-absolute-p dir)))
!           (setq dir (expand-file-name dir default-dir)))
        (if recursive
!           ;; Expand recursively
!           (setq path1 (append (reftex-recursive-directory-list dir) path1))
!         ;; Keep unchanged
!         (push dir path1)))
      (nreverse path1)))
  
  (defun reftex-recursive-directory-list (dir)
***************
*** 1577,1594 ****
    (let ((path (list dir)) path1 file files)
      (while (setq dir (pop path))
        (when (file-directory-p dir)
!       (setq files (nreverse (directory-files dir t "[^.]")))
!       (while (setq file (pop files))
!         (if (file-directory-p file)
!             (push (file-name-as-directory file) path)))
!       (push dir path1)))
      path1))
  
  (defun reftex-uniq (list)
    (let (new)
      (while list
        (or (member (car list) new)
!         (push (car list) new))
        (pop list))
      (nreverse new)))
  
--- 1584,1601 ----
    (let ((path (list dir)) path1 file files)
      (while (setq dir (pop path))
        (when (file-directory-p dir)
!         (setq files (nreverse (directory-files dir t "[^.]")))
!         (while (setq file (pop files))
!           (if (file-directory-p file) 
!               (push (file-name-as-directory file) path)))
!         (push dir path1)))
      path1))
  
  (defun reftex-uniq (list)
    (let (new)
      (while list
        (or (member (car list) new)
!           (push (car list) new))
        (pop list))
      (nreverse new)))
  
***************
*** 1617,1623 ****
  (autoload 'reftex-notice-new "reftex-parse")
  (autoload 'reftex-nth-arg "reftex-parse")
  (autoload 'reftex-locate-bibliography-files "reftex-parse")
- (autoload 'reftex-all-document-files "reftex-parse")
  (autoload 'reftex-ensure-index-support "reftex-parse")
  (autoload 'reftex-everything-regexp "reftex-parse")
  
--- 1624,1629 ----
***************
*** 1652,1659 ****
    "Show the table of contents for the current document." t)
  (autoload 'reftex-toc-recenter "reftex-toc"
    "Display the TOC window and highlight line corresponding to current 
position." t)
! (autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" t)
! 
  
  ;;; =========================================================================
  ;;;
--- 1658,1665 ----
    "Show the table of contents for the current document." t)
  (autoload 'reftex-toc-recenter "reftex-toc"
    "Display the TOC window and highlight line corresponding to current 
position." t)
! (autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" 
!   "Toggle automatic recentering of TOC window." t)
  
  ;;; =========================================================================
  ;;;
***************
*** 1791,1796 ****
--- 1797,1809 ----
    (when (match-beginning n)
      (buffer-substring-no-properties (match-beginning n) (match-end n))))
  
+ (defun reftex-region-active-p ()
+   "Is transient-mark-mode on and the region active?
+ Works on both Emacs and XEmacs."
+   (if (featurep 'xemacs)
+       (and zmacs-regions (region-active-p))
+     (and transient-mark-mode mark-active)))
+ 
  (defun reftex-kill-buffer (buffer)
    ;; Kill buffer if it exists.
    (and (setq buffer (get-buffer buffer))
***************
*** 1848,1854 ****
    (let* ((elt (car (member elt list))) (ex (not exclusive)) ass last-ass)
      (while (and (setq ass (assoc key list))
                  (setq list (memq ass list))
!               (or ex (not (eq elt (car list))))
                  (memq elt list))
        (setq last-ass ass
              list (cdr list)))
--- 1861,1867 ----
    (let* ((elt (car (member elt list))) (ex (not exclusive)) ass last-ass)
      (while (and (setq ass (assoc key list))
                  (setq list (memq ass list))
!                 (or ex (not (eq elt (car list))))
                  (memq elt list))
        (setq last-ass ass
              list (cdr list)))
***************
*** 1862,1883 ****
    (let (rtn)
      (while list
        (if (funcall predicate (car list))
!         (push (if completion
!                   (list (nth nth (car list)))
!                 (nth nth (car list)))
!               rtn))
        (setq list (cdr list)))
      (nreverse rtn)))
  
  (defun reftex-make-selection-buffer-name (type &optional index)
    ;; Make unique name for a selection buffer.
    (format " *RefTeX[%s][%d]*"
!         type (or index (get reftex-docstruct-symbol :master-index) 0)))
  
  (defun reftex-make-index-buffer-name (tag &optional cnt)
    ;; Make unique name for an index buffer.
    (format "*Index[%s][%d]*"
!         tag (or cnt (get reftex-docstruct-symbol :master-index) 0)))
  
  (defun reftex-truncate (string ncols &optional ellipses padding)
    ;; Truncate STRING to NCOLS characters.
--- 1875,1896 ----
    (let (rtn)
      (while list
        (if (funcall predicate (car list))
!           (push (if completion
!                     (list (nth nth (car list))) 
!                   (nth nth (car list)))
!                 rtn))
        (setq list (cdr list)))
      (nreverse rtn)))
  
  (defun reftex-make-selection-buffer-name (type &optional index)
    ;; Make unique name for a selection buffer.
    (format " *RefTeX[%s][%d]*"
!           type (or index (get reftex-docstruct-symbol :master-index) 0)))
  
  (defun reftex-make-index-buffer-name (tag &optional cnt)
    ;; Make unique name for an index buffer.
    (format "*Index[%s][%d]*"
!           tag (or cnt (get reftex-docstruct-symbol :master-index) 0)))
  
  (defun reftex-truncate (string ncols &optional ellipses padding)
    ;; Truncate STRING to NCOLS characters.
***************
*** 1885,1895 ****
    ;; white space to NCOLS characters.  When ELLIPSES is non-nil and the
    ;; string needs to be truncated, replace last 3 characters by dots.
    (setq string
!       (if (<= (length string) ncols)
!           string
!         (if ellipses
!             (concat (substring string 0 (- ncols 3)) "...")
!           (substring string 0 ncols))))
    (if padding
        (format (format "%%-%ds" ncols) string)
      string))
--- 1898,1908 ----
    ;; white space to NCOLS characters.  When ELLIPSES is non-nil and the
    ;; string needs to be truncated, replace last 3 characters by dots.
    (setq string
!         (if (<= (length string) ncols)
!             string
!           (if ellipses
!               (concat (substring string 0 (- ncols 3)) "...")
!             (substring string 0 ncols))))
    (if padding
        (format (format "%%-%ds" ncols) string)
      string))
***************
*** 1899,1906 ****
    ;; If POS is given, calculate distances relative to it.
    ;; Return nil if there is no match.
    (let ((pos (point))
!       (dist (or max-length (length regexp)))
!       match1 match2 match)
      (goto-char (min (+ pos dist) (point-max)))
      (when (re-search-backward regexp nil t)
        (setq match1 (match-data)))
--- 1912,1919 ----
    ;; If POS is given, calculate distances relative to it.
    ;; Return nil if there is no match.
    (let ((pos (point))
!         (dist (or max-length (length regexp)))  
!         match1 match2 match)
      (goto-char (min (+ pos dist) (point-max)))
      (when (re-search-backward regexp nil t)
        (setq match1 (match-data)))
***************
*** 1936,1949 ****
    ;; Enlarge other window displaying buffer to show whole buffer if possible.
    ;; If KEEP-CURRENT in non-nil, current buffer must remain visible.
    (let* ((win1 (selected-window))
!        (buf1 (current-buffer))
!        (win2 (get-buffer-window buf2))) ;; Only on current frame.
      (when win2
        (select-window win2)
!       (unless (and (pos-visible-in-window-p 1)
!                  (pos-visible-in-window-p (point-max)))
!       (enlarge-window (1+ (- (count-lines 1 (point-max))
!                              (reftex-window-height))))))
      (cond
       ((window-live-p win1) (select-window win1))
       (keep-current
--- 1949,1962 ----
    ;; Enlarge other window displaying buffer to show whole buffer if possible.
    ;; If KEEP-CURRENT in non-nil, current buffer must remain visible.
    (let* ((win1 (selected-window))
!          (buf1 (current-buffer))
!          (win2 (get-buffer-window buf2))) ;; Only on current frame.
      (when win2
        (select-window win2)
!       (unless (and (pos-visible-in-window-p (point-min))
!                    (pos-visible-in-window-p (point-max)))
!         (enlarge-window (1+ (- (count-lines (point-min) (point-max))
!                                (reftex-window-height))))))
      (cond
       ((window-live-p win1) (select-window win1))
       (keep-current
***************
*** 1958,1994 ****
    (let ((char ?\?))
      (save-window-excursion
        (catch 'exit
!       (message (concat prompt "   (?=Help)"))
!       (when (or (sit-for (or delay-time 0))
!                 (= ?\? (setq char (read-char-exclusive))))
!         (reftex-kill-buffer "*RefTeX Select*")
!         (switch-to-buffer-other-window "*RefTeX Select*")
!         (insert help-string)
!         (goto-char 1)
!         (unless (and (pos-visible-in-window-p 1)
!                      (pos-visible-in-window-p (point-max)))
!           (enlarge-window (1+ (- (count-lines 1 (point-max))
!                                  (reftex-window-height)))))
!         (setq truncate-lines t))
!       (if (and (pos-visible-in-window-p 1)
!                (pos-visible-in-window-p (point-max)))
!           nil
!         (setq prompt (concat prompt (if scroll "   (SPC/DEL=Scroll)" ""))))
!       (message prompt)
!       (and (equal char ?\?) (setq char (read-char-exclusive)))
!       (while t
!         (cond ((equal char ?\C-g) (keyboard-quit))
!               ((equal char ?\?))
!               ((and scroll (equal char ?\ ))
!                (condition-case nil (scroll-up) (error nil))
!                (message prompt))
!               ((and scroll (equal char ?\C-? ))
!                (condition-case nil (scroll-down) (error nil))
!                (message prompt))
!               (t (message "")
!                  (throw 'exit char)))
!         (setq char (read-char-exclusive)))))))
! 
  
  (defun reftex-make-regexp-allow-for-ctrl-m (string)
    ;; convert STRING into a regexp, allowing ^M for \n and vice versa
--- 1971,2007 ----
    (let ((char ?\?))
      (save-window-excursion
        (catch 'exit
!         (message (concat prompt "   (?=Help)"))
!         (when (or (sit-for (or delay-time 0))
!                   (= ?\? (setq char (read-char-exclusive))))
!           (reftex-kill-buffer "*RefTeX Select*")
!           (switch-to-buffer-other-window "*RefTeX Select*")
!           (insert help-string)
!           (goto-char 1)
!           (unless (and (pos-visible-in-window-p (point-min))
!                        (pos-visible-in-window-p (point-max)))
!             (enlarge-window (1+ (- (count-lines (point-min) (point-max))
!                                    (reftex-window-height)))))
!           (setq truncate-lines t))
!         (if (and (pos-visible-in-window-p (point-min))
!                  (pos-visible-in-window-p (point-max)))
!             nil
!           (setq prompt (concat prompt (if scroll "   (SPC/DEL=Scroll)" ""))))
!         (message prompt)
!         (and (equal char ?\?) (setq char (read-char-exclusive)))
!         (while t
!           (cond ((equal char ?\C-g) (keyboard-quit))
!                 ((equal char ?\?))
!                 ((and scroll (equal char ?\ ))
!                  (condition-case nil (scroll-up) (error nil))
!                  (message prompt))
!                 ((and scroll (equal char ?\C-? ))
!                  (condition-case nil (scroll-down) (error nil))
!                  (message prompt))
!                 (t (message "") 
!                    (throw 'exit char)))
!           (setq char (read-char-exclusive)))))))
!       
  
  (defun reftex-make-regexp-allow-for-ctrl-m (string)
    ;; convert STRING into a regexp, allowing ^M for \n and vice versa
***************
*** 2011,2024 ****
  ;; Define `current-message' for compatibility with XEmacs prior to 20.4
  (defvar message-stack)
  (if (and (featurep 'xemacs)
!        (not (fboundp 'current-message)))
      (defun current-message (&optional frame)
        (cdr (car message-stack))))
  
  (defun reftex-visited-files (list)
    ;; Takes a list of filenames and returns the buffers of those already 
visited
    (delq nil (mapcar (lambda (x) (if (reftex-get-buffer-visiting x) x nil))
!                   list)))
  
  (defun reftex-get-file-buffer-force (file &optional mark-to-kill)
    ;; Return a buffer visiting file.  Make one, if necessary.
--- 2024,2037 ----
  ;; Define `current-message' for compatibility with XEmacs prior to 20.4
  (defvar message-stack)
  (if (and (featurep 'xemacs)
!          (not (fboundp 'current-message)))
      (defun current-message (&optional frame)
        (cdr (car message-stack))))
  
  (defun reftex-visited-files (list)
    ;; Takes a list of filenames and returns the buffers of those already 
visited
    (delq nil (mapcar (lambda (x) (if (reftex-get-buffer-visiting x) x nil))
!                     list)))
  
  (defun reftex-get-file-buffer-force (file &optional mark-to-kill)
    ;; Return a buffer visiting file.  Make one, if necessary.
***************
*** 2049,2055 ****
               (let ((format-alist nil)
                     (auto-mode-alist (reftex-auto-mode-alist))
                     (default-major-mode 'fundamental-mode)
!                  (enable-local-variables nil)
                     (after-insert-file-functions nil))
                 (setq buf (find-file-noselect file)))
  
--- 2062,2068 ----
               (let ((format-alist nil)
                     (auto-mode-alist (reftex-auto-mode-alist))
                     (default-major-mode 'fundamental-mode)
!                    (enable-local-variables nil)
                     (after-insert-file-functions nil))
                 (setq buf (find-file-noselect file)))
  
***************
*** 2059,2067 ****
                   (set-buffer buf)
                   (run-hooks 'reftex-initialize-temporary-buffers))))
  
!          ;; Lets see if we got a license to kill :-|
!          (and mark-to-kill
!               (add-to-list 'reftex-buffers-to-kill buf))
  
             ;; Return the new buffer
             buf)
--- 2072,2080 ----
                   (set-buffer buf)
                   (run-hooks 'reftex-initialize-temporary-buffers))))
  
!            ;; Lets see if we got a license to kill :-|
!            (and mark-to-kill
!                 (add-to-list 'reftex-buffers-to-kill buf))
  
             ;; Return the new buffer
             buf)
***************
*** 2111,2117 ****
    (let (rtn)
      (while list
        (unless (symbolp (car list))
!       (push (car list) rtn))
        (setq list (cdr list)))
      (nreverse rtn)))
  
--- 2124,2130 ----
    (let (rtn)
      (while list
        (unless (symbolp (car list))
!         (push (car list) rtn))
        (setq list (cdr list)))
      (nreverse rtn)))
  
***************
*** 2121,2127 ****
      (while list
        (setq elm (pop list))
        (unless (member elm new)
!       (push elm new)))
      (nreverse new)))
  
  (defun reftex-uniquify-by-car (alist &optional keep-list)
--- 2134,2140 ----
      (while list
        (setq elm (pop list))
        (unless (member elm new)
!         (push elm new)))
      (nreverse new)))
  
  (defun reftex-uniquify-by-car (alist &optional keep-list)
***************
*** 2137,2147 ****
  
  (defun reftex-abbreviate-title (string)
    (reftex-convert-string string "[-~ \t\n\r,;]" nil t t
!                        5 40 nil 1 " " (nth 5 reftex-derive-label-parameters)))
  
  (defun reftex-convert-string (string split-re illegal-re dot keep-fp
!                                    nwords maxchar illegal abbrev sep
!                                    ignore-words &optional downcase)
    "Convert a string (a sentence) to something shorter.
  SPLIT-RE     is the regular expression used to split the string into words.
  ILLEGAL-RE   matches characters which are illegal in the final string.
--- 2150,2160 ----
  
  (defun reftex-abbreviate-title (string)
    (reftex-convert-string string "[-~ \t\n\r,;]" nil t t
!                          5 40 nil 1 " " (nth 5 
reftex-derive-label-parameters)))
  
  (defun reftex-convert-string (string split-re illegal-re dot keep-fp
!                                      nwords maxchar illegal abbrev sep
!                                      ignore-words &optional downcase)
    "Convert a string (a sentence) to something shorter.
  SPLIT-RE     is the regular expression used to split the string into words.
  ILLEGAL-RE   matches characters which are illegal in the final string.
***************
*** 2159,2172 ****
  IGNORE-WORDS List of words which should be removed from the string."
  
    (let* ((words0 (split-string string (or split-re "[ \t\n\r]")))
!        (reftex-label-illegal-re (or illegal-re "\000"))
!        (abbrev-re (concat
!                    "\\`\\("
!                    (make-string (nth 0 reftex-abbrev-parameters) ?.)
!                    "[" (nth 2 reftex-abbrev-parameters) "]*"
!                    "\\)"
!                    "[" (nth 3 reftex-abbrev-parameters) "]"
!                    (make-string (1- (nth 1 reftex-abbrev-parameters)) ?.)))
           words word)
  
      ;; Remove words from the ignore list or with funny characters
--- 2172,2185 ----
  IGNORE-WORDS List of words which should be removed from the string."
  
    (let* ((words0 (split-string string (or split-re "[ \t\n\r]")))
!          (reftex-label-illegal-re (or illegal-re "\000"))
!          (abbrev-re (concat
!                      "\\`\\("
!                      (make-string (nth 0 reftex-abbrev-parameters) ?.)
!                      "[" (nth 2 reftex-abbrev-parameters) "]*"
!                      "\\)"
!                      "[" (nth 3 reftex-abbrev-parameters) "]"
!                      (make-string (1- (nth 1 reftex-abbrev-parameters)) ?.)))
           words word)
  
      ;; Remove words from the ignore list or with funny characters
***************
*** 2186,2206 ****
      ;; Restrict number of words
      (if (> (length words) nwords)
          (setcdr (nthcdr (1- nwords) words) nil))
! 
      ;; First, try to use all words
      (setq string (mapconcat 'identity words sep))
! 
      ;; Abbreviate words if enforced by user settings or string length
      (if (or (eq t abbrev)
              (and abbrev
                   (> (length string) maxchar)))
          (setq words
                (mapcar
!              (lambda (w) (if (string-match abbrev-re w)
!                              (if dot
!                                  (concat (match-string 1 w) ".")
!                                (match-string 1 w))
!                            w))
                 words)
                string (mapconcat 'identity words sep)))
  
--- 2199,2219 ----
      ;; Restrict number of words
      (if (> (length words) nwords)
          (setcdr (nthcdr (1- nwords) words) nil))
!     
      ;; First, try to use all words
      (setq string (mapconcat 'identity words sep))
!   
      ;; Abbreviate words if enforced by user settings or string length
      (if (or (eq t abbrev)
              (and abbrev
                   (> (length string) maxchar)))
          (setq words
                (mapcar
!                (lambda (w) (if (string-match abbrev-re w)
!                                (if dot
!                                    (concat (match-string 1 w) ".")
!                                  (match-string 1 w))
!                              w))
                 words)
                string (mapconcat 'identity words sep)))
  
***************
*** 2250,2296 ****
    (and (reftex-use-fonts)
         (or (eq t reftex-refontify-context)
             (and (eq 1 reftex-refontify-context)
!               ;; Test of we use the font-lock version of x-symbol
!               (and (featurep 'x-symbol-tex) (not (boundp 'x-symbol-mode)))))))
  
  (defvar font-lock-defaults-computed)
  (defun reftex-fontify-select-label-buffer (parent-buffer)
    ;; Fontify the `*RefTeX Select*' buffer.  Buffer is temporarily renamed to
    ;; start with none-SPC char, beacuse Font-Lock otherwise refuses operation.
    (run-hook-with-args 'reftex-pre-refontification-functions
!                     parent-buffer 'reftex-ref)
    (let* ((oldname (buffer-name))
!        (newname (concat "Fontify-me-" oldname)))
      (unwind-protect
!       (progn
!         ;; Rename buffer temporarily to start w/o space (because of font-lock)
!         (rename-buffer newname t)
!         (cond
!          ((fboundp 'font-lock-default-fontify-region)
!           ;; Good: we have the indirection functions
!           (set (make-local-variable 'font-lock-fontify-region-function)
!                'reftex-select-font-lock-fontify-region)
!           (let ((major-mode 'latex-mode))
!             (font-lock-mode 1)))
!          ((fboundp 'font-lock-set-defaults-1)
!           ;; Looks like the XEmacs font-lock stuff.
!           ;; FIXME: this is still kind of a hack, but it works.
!           (set (make-local-variable 'font-lock-keywords) nil)
!           (let ((major-mode 'latex-mode)
!                 (font-lock-defaults-computed nil))
!             (font-lock-set-defaults-1)
!             (reftex-select-font-lock-fontify-region (point-min) (point-max))))
!          (t
!           ;; Oops?
!           (message "Sorry: cannot refontify RefTeX Select buffer."))))
        (rename-buffer oldname))))
  
  (defun reftex-select-font-lock-fontify-region (beg end &optional loudly)
    ;; Fontify a region, but only lines starting with a dot.
    (let ((func (if (fboundp 'font-lock-default-fontify-region)
!                 'font-lock-default-fontify-region
!               'font-lock-fontify-region))
!       beg1 end1)
      (goto-char beg)
      (while (re-search-forward "^\\." end t)
        (setq beg1 (point) end1 (progn (skip-chars-forward "^\n") (point)))
--- 2263,2309 ----
    (and (reftex-use-fonts)
         (or (eq t reftex-refontify-context)
             (and (eq 1 reftex-refontify-context)
!                 ;; Test of we use the font-lock version of x-symbol
!                 (and (featurep 'x-symbol-tex) (not (boundp 
'x-symbol-mode)))))))
  
  (defvar font-lock-defaults-computed)
  (defun reftex-fontify-select-label-buffer (parent-buffer)
    ;; Fontify the `*RefTeX Select*' buffer.  Buffer is temporarily renamed to
    ;; start with none-SPC char, beacuse Font-Lock otherwise refuses operation.
    (run-hook-with-args 'reftex-pre-refontification-functions
!                       parent-buffer 'reftex-ref)
    (let* ((oldname (buffer-name))
!          (newname (concat "Fontify-me-" oldname)))
      (unwind-protect
!         (progn
!           ;; Rename buffer temporarily to start w/o space (because of 
font-lock)
!           (rename-buffer newname t)
!           (cond
!            ((fboundp 'font-lock-default-fontify-region)
!             ;; Good: we have the indirection functions
!             (set (make-local-variable 'font-lock-fontify-region-function)
!                  'reftex-select-font-lock-fontify-region)
!             (let ((major-mode 'latex-mode))
!               (font-lock-mode 1)))
!            ((fboundp 'font-lock-set-defaults-1)
!             ;; Looks like the XEmacs font-lock stuff.
!             ;; FIXME: this is still kind of a hack, but it works.
!             (set (make-local-variable 'font-lock-keywords) nil)
!             (let ((major-mode 'latex-mode)
!                   (font-lock-defaults-computed nil))
!               (font-lock-set-defaults-1)
!               (reftex-select-font-lock-fontify-region (point-min) 
(point-max))))
!            (t
!             ;; Oops? 
!             (message "Sorry: cannot refontify RefTeX Select buffer."))))
        (rename-buffer oldname))))
  
  (defun reftex-select-font-lock-fontify-region (beg end &optional loudly)
    ;; Fontify a region, but only lines starting with a dot.
    (let ((func (if (fboundp 'font-lock-default-fontify-region)
!                   'font-lock-default-fontify-region
!                 'font-lock-fontify-region))
!         beg1 end1)
      (goto-char beg)
      (while (re-search-forward "^\\." end t)
        (setq beg1 (point) end1 (progn (skip-chars-forward "^\n") (point)))
***************
*** 2309,2317 ****
    (let (face)
      (catch 'exit
        (while (setq face (pop faces))
!       (if (featurep 'xemacs)
!           (if (find-face face) (throw 'exit face))
!         (if (facep face) (throw 'exit face)))))))
  
  ;; Highlighting uses overlays.  For XEmacs, we need the emulation.
  (if (featurep 'xemacs) (require 'overlay))
--- 2322,2330 ----
    (let (face)
      (catch 'exit
        (while (setq face (pop faces))
!         (if (featurep 'xemacs)
!             (if (find-face face) (throw 'exit face))
!           (if (facep face) (throw 'exit face)))))))
  
  ;; Highlighting uses overlays.  For XEmacs, we need the emulation.
  (if (featurep 'xemacs) (require 'overlay))
***************
*** 2321,2334 ****
  
  ;; Initialize the overlays
  (aset reftex-highlight-overlays 0 (make-overlay 1 1))
! (overlay-put (aref reftex-highlight-overlays 0)
!            'face 'highlight)
  (aset reftex-highlight-overlays 1 (make-overlay 1 1))
  (overlay-put (aref reftex-highlight-overlays 1)
!            'face reftex-cursor-selected-face)
  (aset reftex-highlight-overlays 2 (make-overlay 1 1))
  (overlay-put (aref reftex-highlight-overlays 2)
!            'face reftex-cursor-selected-face)
  
  ;; Two functions for activating and deactivation highlight overlays
  (defun reftex-highlight (index begin end &optional buffer)
--- 2334,2347 ----
  
  ;; Initialize the overlays
  (aset reftex-highlight-overlays 0 (make-overlay 1 1))
! (overlay-put (aref reftex-highlight-overlays 0) 
!              'face 'highlight)
  (aset reftex-highlight-overlays 1 (make-overlay 1 1))
  (overlay-put (aref reftex-highlight-overlays 1)
!              'face reftex-cursor-selected-face)
  (aset reftex-highlight-overlays 2 (make-overlay 1 1))
  (overlay-put (aref reftex-highlight-overlays 2)
!              'face reftex-cursor-selected-face)
  
  ;; Two functions for activating and deactivation highlight overlays
  (defun reftex-highlight (index begin end &optional buffer)
***************
*** 2346,2375 ****
  
  ;;; =========================================================================
  ;;;
! ;;; Keybindings
  
  ;; The default bindings in the mode map.
  (loop for x in
        '(("\C-c="  . reftex-toc)
!       ("\C-c-"  . reftex-toc-recenter)
!       ("\C-c("  . reftex-label)
!       ("\C-c)"  . reftex-reference)
!       ("\C-c["  . reftex-citation)
!       ("\C-c<"  . reftex-index)
!       ("\C-c>"  . reftex-display-index)
!       ("\C-c/"  . reftex-index-selection-or-word)
!       ("\C-c\\" . reftex-index-phrase-selection-or-word)
!       ("\C-c|"  . reftex-index-visit-phrases-buffer)
!       ("\C-c&"  . reftex-view-crossref))
        do (define-key reftex-mode-map (car x) (cdr x)))
  
  ;; Bind `reftex-mouse-view-crossref' only when the key is still free
  (if (featurep 'xemacs)
      (unless (key-binding [(shift button2)])
!       (define-key reftex-mode-map [(shift button2)]
!       'reftex-mouse-view-crossref))
    (unless (key-binding [(shift mouse-2)])
!     (define-key reftex-mode-map [(shift mouse-2)]
        'reftex-mouse-view-crossref)))
  
  ;; Bind `reftex-view-crossref-from-bibtex' in BibTeX mode map
--- 2359,2388 ----
  
  ;;; =========================================================================
  ;;;
! ;;; Keybindings 
  
  ;; The default bindings in the mode map.
  (loop for x in
        '(("\C-c="  . reftex-toc)
!         ("\C-c-"  . reftex-toc-recenter)
!         ("\C-c("  . reftex-label)
!         ("\C-c)"  . reftex-reference)
!         ("\C-c["  . reftex-citation)
!         ("\C-c<"  . reftex-index)
!         ("\C-c>"  . reftex-display-index)
!         ("\C-c/"  . reftex-index-selection-or-word)
!         ("\C-c\\" . reftex-index-phrase-selection-or-word)
!         ("\C-c|"  . reftex-index-visit-phrases-buffer)
!         ("\C-c&"  . reftex-view-crossref))
        do (define-key reftex-mode-map (car x) (cdr x)))
  
  ;; Bind `reftex-mouse-view-crossref' only when the key is still free
  (if (featurep 'xemacs)
      (unless (key-binding [(shift button2)])
!       (define-key reftex-mode-map [(shift button2)] 
!         'reftex-mouse-view-crossref))
    (unless (key-binding [(shift mouse-2)])
!     (define-key reftex-mode-map [(shift mouse-2)] 
        'reftex-mouse-view-crossref)))
  
  ;; Bind `reftex-view-crossref-from-bibtex' in BibTeX mode map
***************
*** 2380,2393 ****
  ;; If the user requests so, she can have a few more bindings:
  (when reftex-extra-bindings
    (loop for x in
!       '(("\C-ct" . reftex-toc)
!         ("\C-cl" . reftex-label)
!         ("\C-cr" . reftex-reference)
!         ("\C-cc" . reftex-citation)
!         ("\C-cv" . reftex-view-crossref)
!         ("\C-cg" . reftex-grep-document)
!         ("\C-cs" . reftex-search-document))
!       do (define-key reftex-mode-map (car x) (cdr x))))
  
  ;;; =========================================================================
  ;;;
--- 2393,2406 ----
  ;; If the user requests so, she can have a few more bindings:
  (when reftex-extra-bindings
    (loop for x in
!         '(("\C-ct" . reftex-toc)
!           ("\C-cl" . reftex-label)
!           ("\C-cr" . reftex-reference)
!           ("\C-cc" . reftex-citation)
!           ("\C-cv" . reftex-view-crossref)
!           ("\C-cg" . reftex-grep-document)
!           ("\C-cs" . reftex-search-document))
!         do (define-key reftex-mode-map (car x) (cdr x))))
  
  ;;; =========================================================================
  ;;;
***************
*** 2464,2486 ****
       :style toggle :selected reftex-plug-into-AUCTeX])
     ("Reference Style"
      ["Default" (setq reftex-vref-is-default nil
!                    reftex-fref-is-default nil)
!      :style radio :selected (not (or reftex-vref-is-default
!                                    reftex-fref-is-default))]
      ["Varioref" (setq reftex-vref-is-default t
!                     reftex-fref-is-default nil)
       :style radio :selected reftex-vref-is-default]
      ["Fancyref" (setq reftex-fref-is-default t
!                     reftex-vref-is-default nil)
       :style radio :selected reftex-fref-is-default])
     ("Citation Style"
      ,@(mapcar
         (lambda (x)
!        (vector
!         (capitalize (symbol-name (car x)))
!         (list 'reftex-set-cite-format (list 'quote (car x)))
!         :style 'radio :selected
!         (list 'eq (list 'reftex-get-cite-format) (list 'quote (car x)))))
         reftex-cite-format-builtin)
      "--"
      "Sort Database Matches"
--- 2477,2499 ----
       :style toggle :selected reftex-plug-into-AUCTeX])
     ("Reference Style"
      ["Default" (setq reftex-vref-is-default nil
!                      reftex-fref-is-default nil)
!      :style radio :selected (not (or reftex-vref-is-default 
!                                      reftex-fref-is-default))]
      ["Varioref" (setq reftex-vref-is-default t
!                       reftex-fref-is-default nil)
       :style radio :selected reftex-vref-is-default]
      ["Fancyref" (setq reftex-fref-is-default t
!                       reftex-vref-is-default nil)
       :style radio :selected reftex-fref-is-default])
     ("Citation Style"
      ,@(mapcar
         (lambda (x)
!          (vector
!           (capitalize (symbol-name (car x)))
!           (list 'reftex-set-cite-format (list 'quote (car x)))
!           :style 'radio :selected
!           (list 'eq (list 'reftex-get-cite-format) (list 'quote (car x)))))
         reftex-cite-format-builtin)
      "--"
      "Sort Database Matches"
***************
*** 2495,2507 ****
     ("Index Style"
      ,@(mapcar
         (lambda (x)
!        (vector
!         (capitalize (symbol-name (car x)))
!         (list 'reftex-add-index-macros (list 'list (list 'quote (car x))))
!         :style 'radio :selected
!         (list 'memq (list 'quote (car x))
!               (list 'get 'reftex-docstruct-symbol
!                     (list 'quote 'reftex-index-macros-style)))))
         reftex-index-macros-builtin))
     "--"
      ["Reset RefTeX Mode"       reftex-reset-mode t]
--- 2508,2520 ----
     ("Index Style"
      ,@(mapcar
         (lambda (x)
!          (vector
!           (capitalize (symbol-name (car x)))
!           (list 'reftex-add-index-macros (list 'list (list 'quote (car x))))
!           :style 'radio :selected
!           (list 'memq (list 'quote (car x))
!                 (list 'get 'reftex-docstruct-symbol 
!                       (list 'quote 'reftex-index-macros-style)))))
         reftex-index-macros-builtin))
     "--"
      ["Reset RefTeX Mode"       reftex-reset-mode t]
***************
*** 2509,2515 ****
     ("Customize"
      ["Browse RefTeX Group" reftex-customize t]
      "--"
!     ["Build Full Customize Menu" reftex-create-customize-menu
       (fboundp 'customize-menu-create)])
     ("Documentation"
      ["Info" reftex-info t]
--- 2522,2528 ----
     ("Customize"
      ["Browse RefTeX Group" reftex-customize t]
      "--"
!     ["Build Full Customize Menu" reftex-create-customize-menu 
       (fboundp 'customize-menu-create)])
     ("Documentation"
      ["Info" reftex-info t]
***************
*** 2525,2541 ****
    (interactive)
    (if (fboundp 'customize-menu-create)
        (progn
!       (easy-menu-change
!        '("Ref") "Customize"
!        `(["Browse RefTeX group" reftex-customize t]
!          "--"
!          ,(customize-menu-create 'reftex)
!          ["Set" Custom-set t]
!          ["Save" Custom-save t]
!          ["Reset to Current" Custom-reset-current t]
!          ["Reset to Saved" Custom-reset-saved t]
!          ["Reset to Standard Settings" Custom-reset-standard t]))
!       (message "\"Ref\"-menu now contains full customization menu"))
      (error "Cannot expand menu (outdated version of cus-edit.el)")))
  
  (defun reftex-show-commentary ()
--- 2538,2554 ----
    (interactive)
    (if (fboundp 'customize-menu-create)
        (progn
!         (easy-menu-change 
!          '("Ref") "Customize"
!          `(["Browse RefTeX group" reftex-customize t]
!            "--"
!            ,(customize-menu-create 'reftex)
!            ["Set" Custom-set t]
!            ["Save" Custom-save t]
!            ["Reset to Current" Custom-reset-current t]
!            ["Reset to Saved" Custom-reset-saved t]
!            ["Reset to Standard Settings" Custom-reset-standard t]))
!         (message "\"Ref\"-menu now contains full customization menu"))
      (error "Cannot expand menu (outdated version of cus-edit.el)")))
  
  (defun reftex-show-commentary ()
***************
*** 2563,2570 ****
  ;;; That's it! 
----------------------------------------------------------------
  
  (setq reftex-tables-dirty t)  ; in case this file is evaluated by hand
! (provide 'reftex)
  
  
;;;============================================================================
  
  ;;; reftex.el ends here
--- 2576,2584 ----
  ;;; That's it! 
----------------------------------------------------------------
  
  (setq reftex-tables-dirty t)  ; in case this file is evaluated by hand
! (provide 'reftex) 
  
  
;;;============================================================================
  
+ ;;; arch-tag: 49e0da4e-bd5e-4cfc-a717-fb444fccb9e6
  ;;; reftex.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]