Function: reftex-access-parse-file
reftex-access-parse-file is a byte-compiled function defined in
reftex.el.gz.
Signature
(reftex-access-parse-file ACTION)
Documentation
Perform ACTION on the parse file (the .rel file).
Valid actions are: readable, restore, read, kill, write.
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/reftex.el.gz
(defun reftex-access-parse-file (action)
"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)
(file-readable-p file))
((eq action 'restore)
(put reftex-docstruct-symbol 'modified nil)
(if (eq reftex-docstruct-symbol nil)
;; Symbols are not yet tied: Tie them.
(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
(if (file-writable-p file)
(with-temp-file file
(message "Writing parse file %s" (abbreviate-file-name file))
(insert ";; RefTeX parse info file\n")
(insert (format ";; File: %s\n" master))
(insert (format ";; User: %s (%s)\n\n"
(user-login-name) (user-full-name)))
(insert "(set reftex-docstruct-symbol '(\n\n")
(let ((standard-output (current-buffer)))
(mapc
(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"))
(error "Cannot write to file %s" file)))
t))))