• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/emacs-93/emacs/lisp/textmodes/

Lines Matching +defs:reftex +defs:query +defs:label +defs:type

0 ;;; reftex-ref.el --- code to create labels and references with RefTeX
32 (provide 'reftex-ref)
33 (require 'reftex)
34 (require 'reftex-parse)
37 (defun reftex-label-location (&optional bound)
38 "Return the environment or macro which determines the label type at point.
41 (let* ((loc1 (reftex-what-macro reftex-label-mac-list bound))
42 (loc2 (reftex-what-environment reftex-label-env-list bound))
43 (loc3 (reftex-what-special-env 1 bound))
49 (setq reftex-location-start pmax)
53 (setq reftex-default-context-position (+ p1 (length (car loc1))))
57 (setq reftex-default-context-position (+ p2 8 (length (car loc2))))
61 (setq reftex-default-context-position p3)
70 (defun reftex-label-info-update (cell)
71 ;; Update information about just one label in a different file.
73 (let* ((label (nth 0 cell))
79 (buf (reftex-get-file-buffer-force
80 file (not (eq t reftex-keep-temporary-buffers)))))
82 (list label typekey "" file comment "LOST LABEL. RESCAN TO FIX.")
90 (format reftex-find-label-regexp-format
91 (regexp-quote label)) nil t)
93 (format reftex-find-label-regexp-format2
94 (regexp-quote label)) nil t))
98 (append (reftex-label-info label file) (list note)))
99 (list label typekey "" file "LOST LABEL. RESCAN TO FIX.")))))))
101 (defun reftex-label-info (label &optional file bound derive env-or-mac)
103 (let* ((prefix (if (string-match "^[a-zA-Z0-9]+:" label)
104 (match-string 0 label)))
105 (typekey (cdr (assoc prefix reftex-prefix-to-typekey-alist)))
107 (trust reftex-trust-label-prefix)
108 (in-comment (reftex-in-comment)))
115 (list label typekey
116 (reftex-nicify-text (reftex-context-substring))
118 (let* ((env-or-mac (or env-or-mac (reftex-label-location bound)))
119 (typekey (nth 1 (assoc env-or-mac reftex-env-or-mac-alist)))
120 (parse (nth 2 (assoc env-or-mac reftex-env-or-mac-alist)))
121 (text (reftex-short-context env-or-mac parse reftex-location-start
123 (list label typekey text file in-comment)))))
127 (defun reftex-label (&optional environment no-insert)
128 "Insert a unique label. Return the label.
130 If NO-INSERT is non-nil, do not insert label into buffer.
132 When you are prompted to enter or confirm a label, and you reply with
133 just the prefix or an empty string, no label at all will be inserted.
134 A new label is also recorded into the label list.
135 This function is controlled by the settings of reftex-insert-label-flags."
140 (reftex-access-scan-info current-prefix-arg)
144 (not (assoc environment reftex-env-or-mac-alist)))
145 (setq environment (reftex-label-location)))
147 (error "Can't figure out what kind of label should be inserted"))
151 (let* ((entry (assoc environment reftex-env-or-mac-alist))
154 (macro-cell (reftex-what-macro 1))
155 (entry1 (assoc (car macro-cell) reftex-env-or-mac-alist))
156 label naked prefix valid default force-prompt rescan-is-useful)
159 ;; This is an argument of a label macro. Insert naked label.
162 (setq prefix (or (cdr (assoc typekey reftex-typekey-to-prefix-alist))
165 (setq prefix (reftex-replace-prefix-escapes prefix))
167 ;; Make a default label.
170 ((reftex-typekey-check typekey (nth 0 reftex-insert-label-flags))
171 ;; Derive a label from context.
172 (setq reftex-active-toc (reftex-last-assoc-before-elt
173 'toc (car (reftex-where-am-I))
174 (symbol-value reftex-docstruct-symbol)))
175 (setq default (reftex-no-props
176 (nth 2 (reftex-label-info " " nil nil t))))
187 (funcall reftex-string-to-label-function default)))
190 (setq default (reftex-uniquify-label default nil "-"))))
192 ((reftex-typekey-check typekey (nth 1 reftex-insert-label-flags))
197 ;; Make an automatic label.
198 (setq default (reftex-uniquify-label prefix t))))
201 (if (or (reftex-typekey-check typekey
202 (nth 1 reftex-insert-label-flags)) ; prompt
206 ;; iterate until we get a valid label
208 (setq label (read-string
212 ;; Lets make sure that this is a valid label
217 label)
218 ;; No label at all, please
219 (message "No label inserted.")
222 ;; Test if label contains strange characters
223 ((string-match reftex-label-illegal-re label)
224 (message "Label \"%s\" contains invalid characters" label)
228 ;; Look it up in the label list
229 ((setq entry (assoc label
230 (symbol-value reftex-docstruct-symbol)))
233 (format "Label '%s' exists. Use anyway? " label))
239 (setq label default))
241 ;; Insert the label into the label list
247 (reftex-where-am-I)))
254 (tail (memq here-I-am (symbol-value reftex-docstruct-symbol))))
259 (push (list label typekey text file nil note) (cdr tail))
260 (put reftex-docstruct-symbol 'modified t)))
262 ;; Insert the label into the buffer
265 (if reftex-format-label-function
266 (funcall reftex-format-label-function label format)
267 (format format label)))
268 (if (and reftex-plug-into-AUCTeX
271 (LaTeX-add-labels label)))
274 (when reftex-auto-update-selection-buffers
275 (reftex-erase-buffer (reftex-make-selection-buffer-name typekey))
276 (reftex-erase-buffer (reftex-make-selection-buffer-name " ")))
278 (when (and rescan-is-useful reftex-allow-automatic-rescan)
279 (reftex-parse-one))
281 ;; return value of the function is the label
282 label)))
284 (defun reftex-string-to-label (string)
285 "Convert a string (a sentence) to a label.
286 Uses `reftex-derive-label-parameters' and `reftex-label-illegal-re'. It
287 also applies `reftex-translate-to-ascii-function' to the string."
288 (when (and reftex-translate-to-ascii-function
289 (fboundp reftex-translate-to-ascii-function))
290 (setq string (funcall reftex-translate-to-ascii-function string)))
291 (apply 'reftex-convert-string string
292 "[-~ \t\n\r,;]+" reftex-label-illegal-re nil nil
293 reftex-derive-label-parameters))
295 (defun reftex-latin1-to-ascii (string)
309 (defun reftex-replace-prefix-escapes (prefix)
310 ;; Replace %escapes in a label prefix
322 (let ((masterdir (file-name-directory (reftex-TeX-master-file)))
330 (file-name-nondirectory (reftex-TeX-master-file))))
333 (substring (file-name-directory (reftex-TeX-master-file))
341 (when (re-search-backward reftex-section-regexp nil t)
342 (setq macro (reftex-match-string 2)
343 level-exp (cdr (assoc macro reftex-section-levels-all))
348 (cdr (or (assoc macro reftex-section-prefixes)
349 (assoc level reftex-section-prefixes)
350 (assq t reftex-section-prefixes)
357 (defun reftex-uniquify-label (label &optional force separator)
358 ;; Make label unique by appending a number.
359 ;; Optional FORCE means, force appending a number, even if label is unique.
360 ;; Optional SEPARATOR is a string to stick between label and number.
363 (reftex-access-scan-info)
367 (not (assoc label (symbol-value reftex-docstruct-symbol))))
368 label)
370 (let* ((label-numbers (assq 'label-numbers
371 (symbol-value reftex-docstruct-symbol)))
372 (label-numbers-alist (cdr label-numbers))
373 (cell (or (assoc label label-numbers-alist)
374 (car (setcdr label-numbers
375 (cons (cons label 0)
376 label-numbers-alist)))))
379 (while (assoc (concat label sep (int-to-string num))
380 (symbol-value reftex-docstruct-symbol))
383 (concat label sep (int-to-string num))))))
387 ;; Help string for the reference label menu
388 (defconst reftex-select-label-prompt
391 (defconst reftex-select-label-help
392 " n / p Go to next/previous label (Cursor motion works as well)
394 b / l Jump back to previous selection / Reuse last referenced label.
396 g / s Update menu / Switch label type.
398 x Switch to label menu of external document (with LaTeX package `xr').
400 # % Toggle: [#] label counters, [%] labels in comments
404 TAB Enter a label with completion.
407 q / RET Quit without referencing / Accept current label (also on mouse-2).")
409 (defun reftex-reference (&optional type no-insert cut)
413 reftex-label. Rescanning of the buffer can also be requested from the
414 label selection menu.
415 The function returns the selected label or nil.
416 If NO-INSERT is non-nil, do not insert \\ref command, just return label.
422 (reftex-check-recursive-edit)
425 (reftex-access-scan-info current-prefix-arg)
427 (unless type
428 ;; guess type from context
429 (if (and reftex-guess-label-type
430 (setq type (reftex-guess-label-type)))
431 (setq cut (cdr type)
432 type (car type))
433 (setq type (reftex-query-label-type))))
436 (cond ((reftex-typekey-check type reftex-vref-is-default) "\\vref")
437 ((reftex-typekey-check type reftex-fref-is-default) "\\fref")
439 (reftex-format-ref-function reftex-format-ref-function)
441 label labels sep sep1)
443 ;; Have the user select a label
444 (set-marker reftex-select-return-marker (point))
446 (reftex-offer-label-menu type)))
447 (reftex-ensure-compiled-variables)
448 (set-marker reftex-select-return-marker nil)
450 ;; We keep the cdr of the first label for typekey etc information.
454 (setq type (nth 1 (car labels))
455 form (or (cdr (assoc type reftex-typekey-to-format-alist))
460 ;; Just return the first label
467 (setq label (car (car labels))
469 sep1 (cdr (assoc sep reftex-multiref-punctuation))
480 (setq reftex-format-ref-function
482 ((string= refstyle "\\vref") 'reftex-format-vref)
483 ((string= refstyle "\\fref") 'reftex-format-fref)
484 ((string= refstyle "\\Fref") 'reftex-format-Fref)
485 (t reftex-format-ref-function)))
489 (if reftex-format-ref-function
490 (funcall reftex-format-ref-function label form)
491 (format form label label)))
496 label))))
498 (defun reftex-guess-label-type ()
500 (let ((words reftex-words-to-typekey-alist)
512 (defvar reftex-select-label-map)
513 (defun reftex-offer-label-menu (typekey)
516 (xr-data (assq 'xr (symbol-value reftex-docstruct-symbol)))
519 (here-I-am (car (reftex-where-am-I)))
521 (toc (reftex-typekey-check typekey reftex-label-menu-flags 0))
522 (files (reftex-typekey-check typekey reftex-label-menu-flags 7))
523 (context (not (reftex-typekey-check
524 typekey reftex-label-menu-flags 3)))
525 (counter (reftex-typekey-check
526 typekey reftex-label-menu-flags 2))
527 (follow (reftex-typekey-check
528 typekey reftex-label-menu-flags 4))
529 (commented (nth 5 reftex-label-menu-flags))
539 (setq reftex-call-back-to-this-buffer buf
540 reftex-latex-syntax-table (syntax-table))
541 (let ((default-major-mode 'reftex-select-label-mode))
542 (if reftex-use-multiple-selection-buffers
546 (reftex-make-selection-buffer-name typekey)))
548 (reftex-erase-buffer)))
549 (unless (eq major-mode 'reftex-select-label-mode)
550 (reftex-select-label-mode))
562 (setq offset (reftex-insert-docstruct
576 (setq offset (reftex-get-offset buf here-I-am typekey)))
583 (reftex-select-item
584 reftex-select-label-prompt
585 reftex-select-label-help
586 reftex-select-label-map
588 'reftex-show-label-location follow))
597 (reftex-erase-buffer))
602 (reftex-erase-buffer)
603 (reftex-reparse-document buf last-data key))
606 (reftex-erase-buffer)
609 ;; switch type
611 (setq typekey (reftex-query-label-type)))
614 (reftex-erase-buffer)
616 (setq reftex-toc-max-level (prefix-numeric-value
621 (reftex-erase-buffer)
625 (reftex-erase-buffer)
629 (reftex-erase-buffer)
632 ;; reuse the last referenced label again
633 (setq entries reftex-last-used-reference)
637 (setq xr-index (reftex-select-external-document
639 (setq buf (or (reftex-get-file-buffer-force
644 (reftex-access-scan-info))
649 (or (assoc key (symbol-value reftex-docstruct-symbol))
654 (reftex-select-marked
655 (setq entries (nreverse reftex-select-marked)))
661 (setq reftex-last-used-reference entries))
664 (t (error "This should not happen (reftex-offer-label-menu)"))))))
666 (while reftex-buffers-with-changed-invisibility
667 (set-buffer (car (car reftex-buffers-with-changed-invisibility)))
669 (cdr (pop reftex-buffers-with-changed-invisibility)))))
672 (reftex-kill-temporary-buffers))
683 (defun reftex-reparse-document (&optional buffer data key)
693 (reftex-access-scan-info arg file)))))
695 (defun reftex-query-label-type ()
696 ;; Ask for label type
697 (let ((key (reftex-select-with-char
698 reftex-type-query-prompt reftex-type-query-help 3)))
699 (unless (member (char-to-string key) reftex-typekey-list)
700 (error "No such label type: %s" (char-to-string key)))
703 (defun reftex-show-label-location (data forward no-revisit
705 ;; View the definition site of a label in another window.
707 ;; FORWARD indicates if the label is likely forward from current point.
708 ;; NO-REVISIT means do not load a file to show this label.
710 ;; ERROR means throw an error exception when the label cannot be found.
714 label file buffer re found)
717 (setq label (nth 0 data)
721 (funcall errorf "Unknown label - reparse might help")
727 (reftex-get-buffer-visiting file)
728 (reftex-get-file-buffer-force
729 file (not reftex-keep-temporary-buffers))))
735 (funcall errorf "Label %s not found" label)
738 ;; search for that label
739 (setq re (format reftex-find-label-regexp-format (regexp-quote label)))
750 (format reftex-find-label-regexp-format2
751 (regexp-quote label)) nil t))))
754 (reftex-highlight 0 (match-beginning 3) (match-end 3))
755 (reftex-show-entry (match-beginning 3) (match-end 3))
759 (funcall errorf "Label %s not found" label))
763 (defun reftex-show-entry (beg-hlt end-hlt)
765 (let* ((n (/ (reftex-window-height) 2))
775 reftex-buffers-with-changed-invisibility)
786 (reftex-highlight 0 (1+ (- beg-hlt beg)) (1+ (- end-hlt beg)))
787 (if (reftex-refontify)
792 'reftex-pre-refontification-functions
793 reftex-call-back-to-this-buffer 'reftex-hidden)
798 (run-hooks 'reftex-display-copied-context-hook)
801 (defun reftex-varioref-vref ()
804 (let ((reftex-format-ref-function 'reftex-format-vref))
805 (reftex-reference)))
806 (defun reftex-fancyref-fref ()
809 (let ((reftex-format-ref-function 'reftex-format-fref)
810 ;;(reftex-guess-label-type nil) ;FIXME do we want this????
812 (reftex-reference)))
813 (defun reftex-fancyref-Fref ()
816 (let ((reftex-format-ref-function 'reftex-format-Fref)
817 ;;(reftex-guess-label-type nil) ;FIXME do we want this????
819 (reftex-reference)))
821 (defun reftex-format-vref (label fmt)
824 (format fmt label label))
825 (defun reftex-format-Fref (label def-fmt)
826 (format "\\Fref{%s}" label))
827 (defun reftex-format-fref (label def-fmt)
828 (format "\\fref{%s}" label))
830 (defun reftex-goto-label (&optional other-window)
831 "Prompt for a label (with completion) and jump to the location of this label.
832 Optional prefix argument OTHER-WINDOW goes to the label in another window."
834 (reftex-access-scan-info)
836 (docstruct (symbol-value reftex-docstruct-symbol))
837 (label (completing-read "Label: " docstruct
839 (selection (assoc label docstruct))
841 (reftex-show-label-location selection t nil 'stay)
847 (reftex-unhighlight 0)))
852 ;;; reftex-ref.el ends here