Mercurial > emacs
annotate lisp/textmodes/reftex-cite.el @ 71710:dbbc0b93cfeb
(Forcing Redisplay, Displaying Messages, Temporary Displays, Font Selection,
Auto Faces, Font Lookup, Fringe Indicators, Display Margins, Image Descriptors,
Showing Images, Image Cache, Button Types, Making Buttons, Manipulating
Buttons, Button Buffer Commands, Display Table Format, Glyphs): Remove
@tindex.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 08 Jul 2006 18:11:49 +0000 |
parents | bfd5c5e60410 |
children | ad5c0d302d05 34c8b755296d |
rev | line source |
---|---|
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37998
diff
changeset
|
1 ;;; reftex-cite.el --- creating citations with RefTeX |
68648
067115a6e738
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
65638
diff
changeset
|
2 ;; Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2005, |
067115a6e738
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
65638
diff
changeset
|
3 ;; 2006 Free Software Foundation, Inc. |
27035 | 4 |
46612
7522419c4db0
Updated to reftex 4.17
Carsten Dominik <dominik@science.uva.nl>
parents:
46131
diff
changeset
|
5 ;; Author: Carsten Dominik <dominik@science.uva.nl> |
69094
bfd5c5e60410
Version number change only
Carsten Dominik <dominik@science.uva.nl>
parents:
68648
diff
changeset
|
6 ;; Version: 4.31 |
27035 | 7 |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
65638
e274642bf5d5
Update FSF street address; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
65548
diff
changeset
|
22 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
e274642bf5d5
Update FSF street address; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
65548
diff
changeset
|
23 ;; Boston, MA 02110-1301, USA. |
25280 | 24 |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37998
diff
changeset
|
25 ;;; Commentary: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37998
diff
changeset
|
26 |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37998
diff
changeset
|
27 ;;; Code: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37998
diff
changeset
|
28 |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
29 (eval-when-compile (require 'cl)) |
25280 | 30 (provide 'reftex-cite) |
31 (require 'reftex) | |
32 ;;; | |
33 | |
34 ;; Variables and constants | |
35 | |
36 ;; The history list of regular expressions used for citations | |
37 (defvar reftex-cite-regexp-hist nil) | |
38 | |
39 ;; Prompt and help string for citation selection | |
40 (defconst reftex-citation-prompt | |
41 "Select: [n]ext [p]revious [r]estrict [ ]full_entry [q]uit RET [?]Help+more") | |
42 | |
43 (defconst reftex-citation-help | |
44 " n / p Go to next/previous entry (Cursor motion works as well). | |
45 g / r Start over with new regexp / Refine with additional regexp. | |
46 SPC Show full database entry in other window. | |
47 f Toggle follow mode: Other window will follow with full db entry. | |
48 . Show insertion point. | |
49 q Quit without inserting \\cite macro into buffer. | |
50 TAB Enter citation key with completion. | |
51 RET Accept current entry (also on mouse-2) and create \\cite macro. | |
52 m / u Mark/Unmark the entry. | |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
53 e / E Create BibTeX file with all (marked/unmarked) entries |
25280 | 54 a / A Put all (marked) entries into one/many \\cite commands.") |
55 | |
56 ;; Find bibtex files | |
57 | |
46612
7522419c4db0
Updated to reftex 4.17
Carsten Dominik <dominik@science.uva.nl>
parents:
46131
diff
changeset
|
58 (defmacro reftex-with-special-syntax-for-bib (&rest body) |
7522419c4db0
Updated to reftex 4.17
Carsten Dominik <dominik@science.uva.nl>
parents:
46131
diff
changeset
|
59 `(let ((saved-syntax (syntax-table))) |
7522419c4db0
Updated to reftex 4.17
Carsten Dominik <dominik@science.uva.nl>
parents:
46131
diff
changeset
|
60 (unwind-protect |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
61 (progn |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
62 (set-syntax-table reftex-syntax-table-for-bib) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
63 ,@body) |
46612
7522419c4db0
Updated to reftex 4.17
Carsten Dominik <dominik@science.uva.nl>
parents:
46131
diff
changeset
|
64 (set-syntax-table saved-syntax)))) |
7522419c4db0
Updated to reftex 4.17
Carsten Dominik <dominik@science.uva.nl>
parents:
46131
diff
changeset
|
65 |
25280 | 66 (defun reftex-default-bibliography () |
67 ;; Return the expanded value of `reftex-default-bibliography'. | |
68 ;; The expanded value is cached. | |
69 (unless (eq (get 'reftex-default-bibliography :reftex-raw) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
70 reftex-default-bibliography) |
25280 | 71 (put 'reftex-default-bibliography :reftex-expanded |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
72 (reftex-locate-bibliography-files |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
73 default-directory reftex-default-bibliography)) |
25280 | 74 (put 'reftex-default-bibliography :reftex-raw |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
75 reftex-default-bibliography)) |
25280 | 76 (get 'reftex-default-bibliography :reftex-expanded)) |
77 | |
46973
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
78 (defun reftex-bib-or-thebib () |
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
79 ;; Tests if BibTeX or \begin{tehbibliography} should be used for the |
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
80 ;; citation |
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
81 ;; Find the bof of the current file |
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
82 (let* ((docstruct (symbol-value reftex-docstruct-symbol)) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
83 (rest (or (member (list 'bof (buffer-file-name)) docstruct) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
84 docstruct)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
85 (bib (assq 'bib rest)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
86 (thebib (assq 'thebib rest)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
87 (bibmem (memq bib rest)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
88 (thebibmem (memq thebib rest))) |
46973
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
89 (when (not (or thebib bib)) |
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
90 (setq bib (assq 'bib docstruct) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
91 thebib (assq 'thebib docstruct) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
92 bibmem (memq bib docstruct) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
93 thebibmem (memq thebib docstruct))) |
46973
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
94 (if (> (length bibmem) (length thebibmem)) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
95 (if bib 'bib nil) |
46973
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
96 (if thebib 'thebib nil)))) |
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
97 |
25280 | 98 (defun reftex-get-bibfile-list () |
99 ;; Return list of bibfiles for current document. | |
100 ;; When using the chapterbib or bibunits package you should either | |
101 ;; use the same database files everywhere, or separate parts using | |
102 ;; different databases into different files (included into the mater file). | |
103 ;; Then this function will return the applicable database files. | |
104 | |
105 ;; Ensure access to scanning info | |
106 (reftex-access-scan-info) | |
107 (or | |
108 ;; Try inside this file (and its includes) | |
109 (cdr (reftex-last-assoc-before-elt | |
110 'bib (list 'eof (buffer-file-name)) | |
111 (member (list 'bof (buffer-file-name)) | |
112 (symbol-value reftex-docstruct-symbol)))) | |
113 ;; Try after the beginning of this file | |
114 (cdr (assq 'bib (member (list 'bof (buffer-file-name)) | |
115 (symbol-value reftex-docstruct-symbol)))) | |
116 ;; Anywhere in the entire document | |
117 (cdr (assq 'bib (symbol-value reftex-docstruct-symbol))) | |
118 (error "\\bibliography statement missing or .bib files not found"))) | |
119 | |
120 ;; Find a certain reference in any of the BibTeX files. | |
121 | |
122 (defun reftex-pop-to-bibtex-entry (key file-list &optional mark-to-kill | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
123 highlight item return) |
25280 | 124 ;; Find BibTeX KEY in any file in FILE-LIST in another window. |
125 ;; If MARK-TO-KILL is non-nil, mark new buffer to kill. | |
126 ;; If HIGHLIGHT is non-nil, highlight the match. | |
127 ;; If ITEM in non-nil, search for bibitem instead of database entry. | |
128 ;; If RETURN is non-nil, just return the entry. | |
129 | |
130 (let* ((re | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
131 (if item |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
132 (concat "\\\\bibitem\\(\\[[^]]*\\]\\)?{" (regexp-quote key) "}") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
133 (concat "@[a-zA-Z]+[ \t\n\r]*[{(][ \t\n\r]*" (regexp-quote key) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
134 "[, \t\r\n}]"))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
135 (buffer-conf (current-buffer)) |
25801
8f6d4157f700
(reftex-pop-to-bibtex-entry): Fixed bug with recentering window.
Carsten Dominik <dominik@science.uva.nl>
parents:
25280
diff
changeset
|
136 file buf pos) |
25280 | 137 |
138 (catch 'exit | |
139 (while file-list | |
140 (setq file (car file-list) | |
141 file-list (cdr file-list)) | |
142 (unless (setq buf (reftex-get-file-buffer-force file mark-to-kill)) | |
143 (error "No such file %s" file)) | |
144 (set-buffer buf) | |
145 (widen) | |
146 (goto-char (point-min)) | |
147 (when (re-search-forward re nil t) | |
148 (goto-char (match-beginning 0)) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
149 (setq pos (point)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
150 (when return |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
151 ;; Just return the relevant entry |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
152 (if item (goto-char (match-end 0))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
153 (setq return (buffer-substring |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
154 (point) (reftex-end-of-bib-entry item))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
155 (set-buffer buffer-conf) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
156 (throw 'exit return)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
157 (switch-to-buffer-other-window buf) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
158 (goto-char pos) |
25280 | 159 (recenter 0) |
160 (if highlight | |
161 (reftex-highlight 0 (match-beginning 0) (match-end 0))) | |
162 (throw 'exit (selected-window)))) | |
163 (set-buffer buffer-conf) | |
164 (if item | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
165 (error "No \\bibitem with citation key %s" key) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
166 (error "No BibTeX entry with citation key %s" key))))) |
25280 | 167 |
168 (defun reftex-end-of-bib-entry (item) | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
169 (save-excursion |
25280 | 170 (condition-case nil |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
171 (if item |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
172 (progn (end-of-line) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
173 (re-search-forward |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
174 "\\\\bibitem\\|\\end{thebibliography}") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
175 (1- (match-beginning 0))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
176 (progn (forward-list 1) (point))) |
25280 | 177 (error (min (point-max) (+ 300 (point))))))) |
178 | |
179 ;; Parse bibtex buffers | |
180 | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
181 (defun reftex-extract-bib-entries (buffers) |
25280 | 182 ;; Extract bib entries which match regexps from BUFFERS. |
183 ;; BUFFERS is a list of buffers or file names. | |
184 ;; Return list with entries." | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
185 (let* (re-list first-re rest-re |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
186 (buffer-list (if (listp buffers) buffers (list buffers))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
187 found-list entry buffer1 buffer alist |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
188 key-point start-point end-point default) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
189 |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
190 ;; Read a regexp, completing on known citation keys. |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
191 (setq default (regexp-quote (reftex-get-bibkey-default))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
192 (setq re-list |
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
193 (split-string |
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
194 (completing-read |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
195 (concat |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
196 "Regex { && Regex...}: " |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
197 "[" default "]: ") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
198 (if reftex-mode |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
199 (if (fboundp 'LaTeX-bibitem-list) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
200 (LaTeX-bibitem-list) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
201 (cdr (assoc 'bibview-cache |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
202 (symbol-value reftex-docstruct-symbol)))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
203 nil) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
204 nil nil nil 'reftex-cite-regexp-hist) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
205 "[ \t]*&&[ \t]*")) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
206 |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
207 (if (or (null re-list ) (equal re-list '(""))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
208 (setq re-list (list default))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
209 |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
210 (setq first-re (car re-list) ; We'll use the first re to find things, |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
211 rest-re (cdr re-list)) ; the others to narrow down. |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
212 (if (string-match "\\`[ \t]*\\'" (or first-re "")) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
213 (error "Empty regular expression")) |
25280 | 214 |
215 (save-excursion | |
216 (save-window-excursion | |
217 | |
218 ;; Walk through all bibtex files | |
219 (while buffer-list | |
220 (setq buffer (car buffer-list) | |
221 buffer-list (cdr buffer-list)) | |
222 (if (and (bufferp buffer) | |
223 (buffer-live-p buffer)) | |
224 (setq buffer1 buffer) | |
225 (setq buffer1 (reftex-get-file-buffer-force | |
226 buffer (not reftex-keep-temporary-buffers)))) | |
227 (if (not buffer1) | |
228 (message "No such BibTeX file %s (ignored)" buffer) | |
229 (message "Scanning bibliography database %s" buffer1)) | |
230 | |
231 (set-buffer buffer1) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
232 (reftex-with-special-syntax-for-bib |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
233 (save-excursion |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
234 (goto-char (point-min)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
235 (while (re-search-forward first-re nil t) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
236 (catch 'search-again |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
237 (setq key-point (point)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
238 (unless (re-search-backward |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
239 "\\(\\`\\|[\n\r]\\)[ \t]*@\\([a-zA-Z]+\\)[ \t\n\r]*[{(]" nil t) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
240 (throw 'search-again nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
241 (setq start-point (point)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
242 (goto-char (match-end 0)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
243 (condition-case nil |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
244 (up-list 1) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
245 (error (goto-char key-point) |
25280 | 246 (throw 'search-again nil))) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
247 (setq end-point (point)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
248 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
249 ;; Ignore @string, @comment and @c entries or things |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
250 ;; outside entries |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
251 (when (or (string= (downcase (match-string 2)) "string") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
252 (string= (downcase (match-string 2)) "comment") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
253 (string= (downcase (match-string 2)) "c") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
254 (< (point) key-point)) ; this means match not in {} |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
255 (goto-char key-point) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
256 (throw 'search-again nil)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
257 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
258 ;; Well, we have got a match |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
259 ;;(setq entry (concat |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
260 ;; (buffer-substring start-point (point)) "\n")) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
261 (setq entry (buffer-substring start-point (point))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
262 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
263 ;; Check if other regexp match as well |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
264 (setq re-list rest-re) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
265 (while re-list |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
266 (unless (string-match (car re-list) entry) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
267 ;; nope - move on |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
268 (throw 'search-again nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
269 (pop re-list)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
270 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
271 (setq alist (reftex-parse-bibtex-entry |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
272 nil start-point end-point)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
273 (push (cons "&entry" entry) alist) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
274 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
275 ;; check for crossref entries |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
276 (if (assoc "crossref" alist) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
277 (setq alist |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
278 (append |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
279 alist (reftex-get-crossref-alist alist)))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
280 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
281 ;; format the entry |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
282 (push (cons "&formatted" (reftex-format-bib-entry alist)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
283 alist) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
284 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
285 ;; make key the first element |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
286 (push (reftex-get-bib-field "&key" alist) alist) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
287 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
288 ;; add it to the list |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
289 (push alist found-list))))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
290 (reftex-kill-temporary-buffers)))) |
25280 | 291 (setq found-list (nreverse found-list)) |
292 | |
293 ;; Sorting | |
294 (cond | |
295 ((eq 'author reftex-sort-bibtex-matches) | |
296 (sort found-list 'reftex-bib-sort-author)) | |
297 ((eq 'year reftex-sort-bibtex-matches) | |
298 (sort found-list 'reftex-bib-sort-year)) | |
299 ((eq 'reverse-year reftex-sort-bibtex-matches) | |
300 (sort found-list 'reftex-bib-sort-year-reverse)) | |
301 (t found-list)))) | |
302 | |
303 (defun reftex-bib-sort-author (e1 e2) | |
304 (let ((al1 (reftex-get-bib-names "author" e1)) | |
305 (al2 (reftex-get-bib-names "author" e2))) | |
306 (while (and al1 al2 (string= (car al1) (car al2))) | |
307 (pop al1) | |
308 (pop al2)) | |
309 (if (and (stringp (car al1)) | |
310 (stringp (car al2))) | |
311 (string< (car al1) (car al2)) | |
312 (not (stringp (car al1)))))) | |
313 | |
314 (defun reftex-bib-sort-year (e1 e2) | |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
60918
diff
changeset
|
315 (< (string-to-number (or (cdr (assoc "year" e1)) "0")) |
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
60918
diff
changeset
|
316 (string-to-number (or (cdr (assoc "year" e2)) "0")))) |
25280 | 317 |
318 (defun reftex-bib-sort-year-reverse (e1 e2) | |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
60918
diff
changeset
|
319 (> (string-to-number (or (cdr (assoc "year" e1)) "0")) |
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
60918
diff
changeset
|
320 (string-to-number (or (cdr (assoc "year" e2)) "0")))) |
25280 | 321 |
322 (defun reftex-get-crossref-alist (entry) | |
323 ;; return the alist from a crossref entry | |
324 (let ((crkey (cdr (assoc "crossref" entry))) | |
325 start) | |
326 (save-excursion | |
327 (save-restriction | |
328 (widen) | |
329 (if (re-search-forward | |
330 (concat "@\\w+[{(][ \t\n\r]*" (regexp-quote crkey) | |
331 "[ \t\n\r]*,") nil t) | |
332 (progn | |
333 (setq start (match-beginning 0)) | |
334 (condition-case nil | |
335 (up-list 1) | |
336 (error nil)) | |
337 (reftex-parse-bibtex-entry nil start (point))) | |
338 nil))))) | |
339 | |
45318 | 340 ;; Parse the bibliography environment |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
341 (defun reftex-extract-bib-entries-from-thebibliography (files) |
25280 | 342 ;; Extract bib-entries from the \begin{thebibliography} environment. |
343 ;; Parsing is not as good as for the BibTeX database stuff. | |
344 ;; The environment should be located in file FILE. | |
345 | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
346 (let* (start end buf entries re re-list file default) |
25801
8f6d4157f700
(reftex-pop-to-bibtex-entry): Fixed bug with recentering window.
Carsten Dominik <dominik@science.uva.nl>
parents:
25280
diff
changeset
|
347 (unless files |
25280 | 348 (error "Need file name to find thebibliography environment")) |
25801
8f6d4157f700
(reftex-pop-to-bibtex-entry): Fixed bug with recentering window.
Carsten Dominik <dominik@science.uva.nl>
parents:
25280
diff
changeset
|
349 (while (setq file (pop files)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
350 (setq buf (reftex-get-file-buffer-force |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
351 file (not reftex-keep-temporary-buffers))) |
25801
8f6d4157f700
(reftex-pop-to-bibtex-entry): Fixed bug with recentering window.
Carsten Dominik <dominik@science.uva.nl>
parents:
25280
diff
changeset
|
352 (unless buf |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
353 (error "No such file %s" file)) |
25801
8f6d4157f700
(reftex-pop-to-bibtex-entry): Fixed bug with recentering window.
Carsten Dominik <dominik@science.uva.nl>
parents:
25280
diff
changeset
|
354 (message "Scanning thebibliography environment in %s" file) |
25280 | 355 |
25801
8f6d4157f700
(reftex-pop-to-bibtex-entry): Fixed bug with recentering window.
Carsten Dominik <dominik@science.uva.nl>
parents:
25280
diff
changeset
|
356 (save-excursion |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
357 (set-buffer buf) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
358 (save-restriction |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
359 (widen) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
360 (goto-char (point-min)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
361 (while (re-search-forward |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
362 "\\(\\`\\|[\n\r]\\)[ \t]*\\\\begin{thebibliography}" nil t) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
363 (beginning-of-line 2) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
364 (setq start (point)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
365 (if (re-search-forward |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
366 "\\(\\`\\|[\n\r]\\)[ \t]*\\\\end{thebibliography}" nil t) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
367 (progn |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
368 (beginning-of-line 1) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
369 (setq end (point)))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
370 (when (and start end) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
371 (setq entries |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
372 (append entries |
25801
8f6d4157f700
(reftex-pop-to-bibtex-entry): Fixed bug with recentering window.
Carsten Dominik <dominik@science.uva.nl>
parents:
25280
diff
changeset
|
373 (mapcar 'reftex-parse-bibitem |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
374 (delete "" |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
375 (split-string |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
376 (buffer-substring-no-properties start end) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
377 "[ \t\n\r]*\\\\bibitem\\(\\[[^]]*]\\)*")))))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
378 (goto-char end))))) |
25280 | 379 (unless entries |
380 (error "No bibitems found")) | |
381 | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
382 ;; Read a regexp, completing on known citation keys. |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
383 (setq default (regexp-quote (reftex-get-bibkey-default))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
384 (setq re-list |
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
385 (split-string |
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
386 (completing-read |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
387 (concat |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
388 "Regex { && Regex...}: " |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
389 "[" default "]: ") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
390 (if reftex-mode |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
391 (if (fboundp 'LaTeX-bibitem-list) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
392 (LaTeX-bibitem-list) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
393 (cdr (assoc 'bibview-cache |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
394 (symbol-value reftex-docstruct-symbol)))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
395 nil) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
396 nil nil nil 'reftex-cite-regexp-hist) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
397 "[ \t]*&&[ \t]*")) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
398 |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
399 (if (or (null re-list ) (equal re-list '(""))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
400 (setq re-list (list default))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
401 |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
402 (if (string-match "\\`[ \t]*\\'" (car re-list)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
403 (error "Empty regular expression")) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
404 |
25280 | 405 (while (and (setq re (pop re-list)) entries) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
406 (setq entries |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
407 (delq nil (mapcar |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
408 (lambda (x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
409 (if (string-match re (cdr (assoc "&entry" x))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
410 x nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
411 entries)))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
412 (setq entries |
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
413 (mapcar |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
414 (lambda (x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
415 (push (cons "&formatted" (reftex-format-bibitem x)) x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
416 (push (reftex-get-bib-field "&key" x) x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
417 x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
418 entries)) |
25280 | 419 |
420 entries)) | |
421 | |
46683
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
422 (defun reftex-get-bibkey-default () |
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
423 ;; Return the word before the cursor. If the cursor is in a |
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
424 ;; citation macro, return the word before the macro. |
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
425 (let* ((macro (reftex-what-macro 1))) |
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
426 (save-excursion |
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
427 (if (and macro (string-match "cite" (car macro))) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
428 (goto-char (cdr macro))) |
46683
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
429 (skip-chars-backward "^a-zA-Z0-9") |
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
430 (reftex-this-word)))) |
060f433ebf11
Updated to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46612
diff
changeset
|
431 |
25280 | 432 ;; Parse and format individual entries |
433 | |
434 (defun reftex-get-bib-names (field entry) | |
435 ;; Return a list with the author or editor names in ENTRY | |
436 (let ((names (reftex-get-bib-field field entry))) | |
437 (if (equal "" names) | |
438 (setq names (reftex-get-bib-field "editor" entry))) | |
439 (while (string-match "\\band\\b[ \t]*" names) | |
440 (setq names (replace-match "\n" nil t names))) | |
441 (while (string-match "[\\.a-zA-Z\\-]+\\.[ \t]*\\|,.*\\|[{}]+" names) | |
442 (setq names (replace-match "" nil t names))) | |
443 (while (string-match "^[ \t]+\\|[ \t]+$" names) | |
444 (setq names (replace-match "" nil t names))) | |
445 (while (string-match "[ \t][ \t]+" names) | |
446 (setq names (replace-match " " nil t names))) | |
447 (split-string names "\n"))) | |
448 | |
449 (defun reftex-parse-bibtex-entry (entry &optional from to) | |
450 (let (alist key start field) | |
451 (save-excursion | |
452 (save-restriction | |
453 (if entry | |
454 (progn | |
455 (set-buffer (get-buffer-create " *RefTeX-scratch*")) | |
456 (fundamental-mode) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
457 (set-syntax-table reftex-syntax-table-for-bib) |
25280 | 458 (erase-buffer) |
459 (insert entry)) | |
460 (widen) | |
461 (narrow-to-region from to)) | |
462 (goto-char (point-min)) | |
463 | |
464 (if (re-search-forward | |
465 "@\\(\\w+\\)[ \t\n\r]*[{(][ \t\n\r]*\\([^ \t\n\r,]+\\)" nil t) | |
466 (setq alist | |
467 (list | |
468 (cons "&type" (downcase (reftex-match-string 1))) | |
469 (cons "&key" (reftex-match-string 2))))) | |
470 (while (re-search-forward "\\(\\w+\\)[ \t\n\r]*=[ \t\n\r]*" nil t) | |
471 (setq key (downcase (reftex-match-string 1))) | |
472 (cond | |
473 ((= (following-char) ?{) | |
474 (forward-char 1) | |
475 (setq start (point)) | |
476 (condition-case nil | |
477 (up-list 1) | |
478 (error nil))) | |
479 ((= (following-char) ?\") | |
480 (forward-char 1) | |
481 (setq start (point)) | |
482 (while (and (search-forward "\"" nil t) | |
483 (= ?\\ (char-after (- (point) 2)))))) | |
484 (t | |
485 (setq start (point)) | |
486 (re-search-forward "[ \t]*[\n\r,}]" nil 1))) | |
487 (setq field (buffer-substring-no-properties start (1- (point)))) | |
488 ;; remove extra whitespace | |
489 (while (string-match "[\n\t\r]\\|[ \t][ \t]+" field) | |
490 (setq field (replace-match " " nil t field))) | |
491 ;; remove leading garbage | |
492 (if (string-match "^[ \t{]+" field) | |
493 (setq field (replace-match "" nil t field))) | |
494 ;; remove trailing garbage | |
495 (if (string-match "[ \t}]+$" field) | |
496 (setq field (replace-match "" nil t field))) | |
497 (push (cons key field) alist)))) | |
498 alist)) | |
499 | |
500 (defun reftex-get-bib-field (fieldname entry &optional format) | |
501 ;; Extract the field FIELDNAME from an ENTRY | |
502 (let ((cell (assoc fieldname entry))) | |
503 (if cell | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
504 (if format |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
505 (format format (cdr cell)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
506 (cdr cell)) |
25280 | 507 ""))) |
508 | |
509 (defun reftex-format-bib-entry (entry) | |
510 ;; Format a BibTeX ENTRY so that it is nice to look at | |
511 (let* | |
512 ((auth-list (reftex-get-bib-names "author" entry)) | |
513 (authors (mapconcat 'identity auth-list ", ")) | |
514 (year (reftex-get-bib-field "year" entry)) | |
515 (title (reftex-get-bib-field "title" entry)) | |
516 (type (reftex-get-bib-field "&type" entry)) | |
517 (key (reftex-get-bib-field "&key" entry)) | |
518 (extra | |
519 (cond | |
520 ((equal type "article") | |
521 (concat (reftex-get-bib-field "journal" entry) " " | |
522 (reftex-get-bib-field "volume" entry) ", " | |
523 (reftex-get-bib-field "pages" entry))) | |
524 ((equal type "book") | |
525 (concat "book (" (reftex-get-bib-field "publisher" entry) ")")) | |
526 ((equal type "phdthesis") | |
527 (concat "PhD: " (reftex-get-bib-field "school" entry))) | |
528 ((equal type "mastersthesis") | |
529 (concat "Master: " (reftex-get-bib-field "school" entry))) | |
530 ((equal type "inbook") | |
531 (concat "Chap: " (reftex-get-bib-field "chapter" entry) | |
532 ", pp. " (reftex-get-bib-field "pages" entry))) | |
533 ((or (equal type "conference") | |
534 (equal type "incollection") | |
535 (equal type "inproceedings")) | |
536 (reftex-get-bib-field "booktitle" entry "in: %s")) | |
537 (t "")))) | |
538 (setq authors (reftex-truncate authors 30 t t)) | |
539 (when (reftex-use-fonts) | |
540 (put-text-property 0 (length key) 'face | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
541 (reftex-verified-face reftex-label-face |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
542 'font-lock-constant-face |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
543 'font-lock-reference-face) |
25280 | 544 key) |
545 (put-text-property 0 (length authors) 'face reftex-bib-author-face | |
546 authors) | |
547 (put-text-property 0 (length year) 'face reftex-bib-year-face | |
548 year) | |
549 (put-text-property 0 (length title) 'face reftex-bib-title-face | |
550 title) | |
551 (put-text-property 0 (length extra) 'face reftex-bib-extra-face | |
552 extra)) | |
553 (concat key "\n " authors " " year " " extra "\n " title "\n\n"))) | |
554 | |
555 (defun reftex-parse-bibitem (item) | |
556 ;; Parse a \bibitem entry | |
557 (let ((key "") (text "")) | |
37998
706af946b1e7
* reftex-ref.el (reftex-select-label-help): Added "z" key
Carsten Dominik <dominik@science.uva.nl>
parents:
34402
diff
changeset
|
558 (when (string-match "\\`{\\([^}]+\\)}\\([^\000]*\\)" item) |
25280 | 559 (setq key (match-string 1 item) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
560 text (match-string 2 item))) |
25280 | 561 ;; Clean up the text a little bit |
562 (while (string-match "[\n\r\t]\\|[ \t][ \t]+" text) | |
563 (setq text (replace-match " " nil t text))) | |
564 (if (string-match "\\`[ \t]+" text) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
565 (setq text (replace-match "" nil t text))) |
25280 | 566 (list |
567 (cons "&key" key) | |
568 (cons "&text" text) | |
569 (cons "&entry" (concat key " " text))))) | |
570 | |
571 (defun reftex-format-bibitem (item) | |
572 ;; Format a \bibitem entry so that it is (relatively) nice to look at. | |
573 (let ((text (reftex-get-bib-field "&text" item)) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
574 (key (reftex-get-bib-field "&key" item)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
575 (lines nil)) |
25280 | 576 |
577 ;; Wrap the text into several lines. | |
578 (while (and (> (length text) 70) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
579 (string-match " " (substring text 60))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
580 (push (substring text 0 (+ 60 (match-beginning 0))) lines) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
581 (setq text (substring text (+ 61 (match-beginning 0))))) |
25280 | 582 (push text lines) |
583 (setq text (mapconcat 'identity (nreverse lines) "\n ")) | |
584 | |
585 (when (reftex-use-fonts) | |
586 (put-text-property 0 (length text) 'face reftex-bib-author-face text)) | |
587 (concat key "\n " text "\n\n"))) | |
588 | |
589 ;; Make a citation | |
590 | |
591 ;;;###autoload | |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
592 (defun reftex-citation (&optional no-insert format-key) |
25280 | 593 "Make a citation using BibTeX database files. |
594 After prompting for a regular expression, scans the buffers with | |
595 bibtex entries (taken from the \\bibliography command) and offers the | |
46131
7255ef8cf60f
(reftex-citation): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents:
45318
diff
changeset
|
596 matching entries for selection. The selected entry is formatted according |
25280 | 597 to `reftex-cite-format' and inserted into the buffer. |
598 | |
599 If NO-INSERT is non-nil, nothing is inserted, only the selected key returned. | |
600 | |
59579
a588c86a429c
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-40
Miles Bader <miles@gnu.org>
parents:
59534
diff
changeset
|
601 FORMAT-KEY can be used to pre-select a citation format. |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
602 |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
603 When called with a `C-u' prefix, prompt for optional arguments in |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
604 cite macros. When called with a numeric prefix, make that many |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
605 citations. When called with point inside the braces of a `\\cite' |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
606 command, it will add another key, ignoring the value of |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
607 `reftex-cite-format'. |
25280 | 608 |
609 The regular expression uses an expanded syntax: && is interpreted as `and'. | |
610 Thus, `aaaa&&bbb' matches entries which contain both `aaaa' and `bbb'. | |
611 While entering the regexp, completion on knows citation keys is possible. | |
612 `=' is a good regular expression to match all entries in all files." | |
613 | |
614 (interactive) | |
615 | |
616 ;; check for recursive edit | |
617 (reftex-check-recursive-edit) | |
618 | |
619 ;; This function may also be called outside reftex-mode. | |
620 ;; Thus look for the scanning info only if in reftex-mode. | |
621 | |
622 (when reftex-mode | |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
623 (reftex-access-scan-info nil)) |
25280 | 624 |
625 ;; Call reftex-do-citation, but protected | |
626 (unwind-protect | |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
627 (reftex-do-citation current-prefix-arg no-insert format-key) |
25280 | 628 (reftex-kill-temporary-buffers))) |
629 | |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
630 (defun reftex-do-citation (&optional arg no-insert format-key) |
25280 | 631 ;; This really does the work of reftex-citation. |
632 | |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
633 (let* ((format (reftex-figure-out-cite-format arg no-insert format-key)) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
634 (docstruct-symbol reftex-docstruct-symbol) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
635 (selected-entries (reftex-offer-bib-menu)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
636 (insert-entries selected-entries) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
637 entry string cite-view) |
25280 | 638 |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
639 (when (stringp selected-entries) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
640 (error selected-entries)) |
25280 | 641 (unless selected-entries (error "Quit")) |
642 | |
643 (if (stringp selected-entries) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
644 ;; Nonexistent entry |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
645 (setq selected-entries nil |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
646 insert-entries (list (list selected-entries |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
647 (cons "&key" selected-entries)))) |
25280 | 648 ;; It makes sense to compute the cite-view strings. |
649 (setq cite-view t)) | |
650 | |
651 (when (eq (car selected-entries) 'concat) | |
652 ;; All keys go into a single command - we need to trick a little | |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
653 ;; FIXME: Unfortunately, this meens that commenting does not work right. |
25280 | 654 (pop selected-entries) |
655 (let ((concat-keys (mapconcat 'car selected-entries ","))) | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
656 (setq insert-entries |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
657 (list (list concat-keys (cons "&key" concat-keys)))))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
658 |
25280 | 659 (unless no-insert |
660 | |
661 ;; We shall insert this into the buffer... | |
662 (message "Formatting...") | |
59579
a588c86a429c
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-40
Miles Bader <miles@gnu.org>
parents:
59534
diff
changeset
|
663 |
25280 | 664 (while (setq entry (pop insert-entries)) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
665 ;; Format the citation and insert it |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
666 (setq string (if reftex-format-cite-function |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
667 (funcall reftex-format-cite-function |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
668 (reftex-get-bib-field "&key" entry) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
669 format) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
670 (reftex-format-citation entry format))) |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
671 (when (or (eq reftex-cite-prompt-optional-args t) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
672 (and reftex-cite-prompt-optional-args |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
673 (equal arg '(4)))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
674 (let ((start 0) (nth 0) value) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
675 (while (setq start (string-match "\\[\\]" string start)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
676 (setq value (read-string (format "Optional argument %d: " |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
677 (setq nth (1+ nth))))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
678 (setq string (replace-match (concat "[" value "]") t t string)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
679 (setq start (1+ start))))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
680 ;; Should we cleanup empty optional arguments? |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
681 ;; if the first is empty, it can be removed. If the second is empty, |
60056
978d83f0a49f
(reftex-do-citation): Cleanup single
Carsten Dominik <dominik@science.uva.nl>
parents:
59579
diff
changeset
|
682 ;; it has to go. If there is only a single arg and empty, it can go |
62467
35f6599373fc
* textmodes/reftex-vars.el (reftex-cite-format-builtin): Support
Carsten Dominik <dominik@science.uva.nl>
parents:
62402
diff
changeset
|
683 ;; as well. |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
684 (when reftex-cite-cleanup-optional-args |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
685 (cond |
60056
978d83f0a49f
(reftex-do-citation): Cleanup single
Carsten Dominik <dominik@science.uva.nl>
parents:
59579
diff
changeset
|
686 ((string-match "\\([a-zA-Z0-9]\\)\\[\\]{" string) |
978d83f0a49f
(reftex-do-citation): Cleanup single
Carsten Dominik <dominik@science.uva.nl>
parents:
59579
diff
changeset
|
687 (setq string (replace-match "\\1{" nil nil string))) |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
688 ((string-match "\\[\\]\\(\\[[a-zA-Z0-9., ]+\\]\\)" string) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
689 (setq string (replace-match "\\1" nil nil string))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
690 ((string-match "\\[\\]\\[\\]" string) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
691 (setq string (replace-match "" t t string))))) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
692 (insert string)) |
25280 | 693 |
694 ;; Reposition cursor? | |
695 (when (string-match "\\?" string) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
696 (search-backward "?") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
697 (delete-char 1)) |
25280 | 698 |
699 ;; Tell AUCTeX | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
700 (when (and reftex-mode |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
701 (fboundp 'LaTeX-add-bibitems) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
702 reftex-plug-into-AUCTeX) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
703 (apply 'LaTeX-add-bibitems (mapcar 'car selected-entries))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
704 |
25280 | 705 ;; Produce the cite-view strings |
706 (when (and reftex-mode reftex-cache-cite-echo cite-view) | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
707 (mapcar (lambda (entry) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
708 (reftex-make-cite-echo-string entry docstruct-symbol)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
709 selected-entries)) |
25280 | 710 |
711 (message "")) | |
712 | |
713 (set-marker reftex-select-return-marker nil) | |
714 (reftex-kill-buffer "*RefTeX Select*") | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
715 |
25280 | 716 ;; Check if the prefix arg was numeric, and call recursively |
717 (when (integerp arg) | |
718 (if (> arg 1) | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
719 (progn |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
720 (skip-chars-backward "}") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
721 (decf arg) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
722 (reftex-do-citation arg)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
723 (forward-char 1))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
724 |
25280 | 725 ;; Return the citation key |
726 (car (car selected-entries)))) | |
727 | |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
728 (defun reftex-figure-out-cite-format (arg &optional no-insert format-key) |
25280 | 729 ;; Check if there is already a cite command at point and change cite format |
730 ;; in order to only add another reference in the same cite command. | |
731 (let ((macro (car (reftex-what-macro 1))) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
732 (cite-format-value (reftex-get-cite-format)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
733 key format) |
25280 | 734 (cond |
735 (no-insert | |
736 ;; Format does not really matter because nothing will be inserted. | |
737 (setq format "%l")) | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
738 |
25280 | 739 ((and (stringp macro) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
740 (string-match "\\`\\\\cite\\|cite\\'" macro)) |
25280 | 741 ;; We are already inside a cite macro |
742 (if (or (not arg) (not (listp arg))) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
743 (setq format |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
744 (concat |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
745 (if (member (preceding-char) '(?\{ ?,)) "" ",") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
746 "%l" |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
747 (if (member (following-char) '(?\} ?,)) "" ","))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
748 (setq format "%l"))) |
25280 | 749 (t |
750 ;; Figure out the correct format | |
751 (setq format | |
752 (if (and (symbolp cite-format-value) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
753 (assq cite-format-value reftex-cite-format-builtin)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
754 (nth 2 (assq cite-format-value reftex-cite-format-builtin)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
755 cite-format-value)) |
25280 | 756 (when (listp format) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
757 (setq key |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
758 (or format-key |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
759 (reftex-select-with-char |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
760 "" (concat "SELECT A CITATION FORMAT\n\n" |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
761 (mapconcat |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
762 (lambda (x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
763 (format "[%c] %s %s" (car x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
764 (if (> (car x) 31) " " "") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
765 (cdr x))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
766 format "\n"))))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
767 (if (assq key format) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
768 (setq format (cdr (assq key format))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
769 (error "No citation format associated with key `%c'" key))))) |
25280 | 770 format)) |
771 | |
26910
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
772 (defun reftex-citep () |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
773 "Call `reftex-citation' with a format selector `?p'." |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
774 (interactive) |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
775 (reftex-citation nil ?p)) |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
776 |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
777 (defun reftex-citet () |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
778 "Call `reftex-citation' with a format selector `?t'." |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
779 (interactive) |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
780 (reftex-citation nil ?t)) |
489a5439b988
* reftex.el (reftex-compile-variables): respect new structure of
Carsten Dominik <dominik@science.uva.nl>
parents:
25806
diff
changeset
|
781 |
25280 | 782 (defvar reftex-select-bib-map) |
783 (defun reftex-offer-bib-menu () | |
784 ;; Offer bib menu and return list of selected items | |
785 | |
46973
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
786 (let ((bibtype (reftex-bib-or-thebib)) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
787 found-list rtn key data selected-entries) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
788 (while |
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
789 (not |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
790 (catch 'done |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
791 ;; Scan bibtex files |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
792 (setq found-list |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
793 (cond |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
794 ((eq bibtype 'bib) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
795 ; ((assq 'bib (symbol-value reftex-docstruct-symbol)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
796 ;; using BibTeX database files. |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
797 (reftex-extract-bib-entries (reftex-get-bibfile-list))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
798 ((eq bibtype 'thebib) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
799 ; ((assq 'thebib (symbol-value reftex-docstruct-symbol)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
800 ;; using thebibliography environment. |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
801 (reftex-extract-bib-entries-from-thebibliography |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
802 (reftex-uniquify |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
803 (mapcar 'cdr |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
804 (reftex-all-assq |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
805 'thebib (symbol-value reftex-docstruct-symbol)))))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
806 (reftex-default-bibliography |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
807 (message "Using default bibliography") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
808 (reftex-extract-bib-entries (reftex-default-bibliography))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
809 (t (error "No valid bibliography in this document, and no default available")))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
810 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
811 (unless found-list |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
812 (error "Sorry, no matches found")) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
813 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
814 ;; Remember where we came from |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
815 (setq reftex-call-back-to-this-buffer (current-buffer)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
816 (set-marker reftex-select-return-marker (point)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
817 |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
818 ;; Offer selection |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
819 (save-window-excursion |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
820 (delete-other-windows) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
821 (let ((default-major-mode 'reftex-select-bib-mode)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
822 (reftex-kill-buffer "*RefTeX Select*") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
823 (switch-to-buffer-other-window "*RefTeX Select*") |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
824 (unless (eq major-mode 'reftex-select-bib-mode) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
825 (reftex-select-bib-mode)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
826 (let ((buffer-read-only nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
827 (erase-buffer) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
828 (reftex-insert-bib-matches found-list))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
829 (setq buffer-read-only t) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
830 (if (= 0 (buffer-size)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
831 (error "No matches found")) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
832 (setq truncate-lines t) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
833 (goto-char 1) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
834 (while t |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
835 (setq rtn |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
836 (reftex-select-item |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
837 reftex-citation-prompt |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
838 reftex-citation-help |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
839 reftex-select-bib-map |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
840 nil |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
841 'reftex-bibtex-selection-callback nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
842 (setq key (car rtn) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
843 data (nth 1 rtn)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
844 (unless key (throw 'done t)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
845 (cond |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
846 ((eq key ?g) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
847 ;; Start over |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
848 (throw 'done nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
849 ((eq key ?r) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
850 ;; Restrict with new regular expression |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
851 (setq found-list (reftex-restrict-bib-matches found-list)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
852 (let ((buffer-read-only nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
853 (erase-buffer) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
854 (reftex-insert-bib-matches found-list)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
855 (goto-char 1)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
856 ((eq key ?A) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
857 ;; Take all (marked) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
858 (setq selected-entries |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
859 (if reftex-select-marked |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
860 (mapcar 'car (nreverse reftex-select-marked)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
861 found-list)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
862 (throw 'done t)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
863 ((eq key ?a) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
864 ;; Take all (marked), and push the symbol 'concat |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
865 (setq selected-entries |
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
866 (cons 'concat |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
867 (if reftex-select-marked |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
868 (mapcar 'car (nreverse reftex-select-marked)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
869 found-list))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
870 (throw 'done t)) |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
871 ((eq key ?e) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
872 ;; Take all (marked), and push the symbol 'concat |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
873 (reftex-extract-bib-file found-list reftex-select-marked) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
874 (setq selected-entries "BibTeX database file created") |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
875 (throw 'done t)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
876 ((eq key ?E) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
877 ;; Take all (marked), and push the symbol 'concat |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
878 (reftex-extract-bib-file found-list reftex-select-marked |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
879 'complement) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
880 (setq selected-entries "BibTeX database file created") |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
881 (throw 'done t)) |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
882 ((or (eq key ?\C-m) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
883 (eq key 'return)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
884 ;; Take selected |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
885 (setq selected-entries |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
886 (if reftex-select-marked |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
887 (cons 'concat |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
888 (mapcar 'car (nreverse reftex-select-marked))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
889 (if data (list data) nil))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
890 (throw 'done t)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
891 ((stringp key) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
892 ;; Got this one with completion |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
893 (setq selected-entries key) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
894 (throw 'done t)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
895 (t |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
896 (ding)))))))) |
25280 | 897 selected-entries)) |
898 | |
899 (defun reftex-restrict-bib-matches (found-list) | |
900 ;; Limit FOUND-LIST with more regular expressions | |
901 (let ((re-list (split-string (read-string | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
902 "RegExp [ && RegExp...]: " |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
903 nil 'reftex-cite-regexp-hist) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
904 "[ \t]*&&[ \t]*")) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
905 (found-list-r found-list) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
906 re) |
25280 | 907 (while (setq re (pop re-list)) |
908 (setq found-list-r | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
909 (delq nil |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
910 (mapcar |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
911 (lambda (x) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
912 (if (string-match |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
913 re (cdr (assoc "&entry" x))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
914 x |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
915 nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
916 found-list-r)))) |
25280 | 917 (if found-list-r |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
918 found-list-r |
25280 | 919 (ding) |
920 found-list))) | |
921 | |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
922 (defun reftex-extract-bib-file (all &optional marked complement) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
923 ;; Limit FOUND-LIST with more regular expressions |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
924 (let ((file (read-file-name "File to create: "))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
925 (find-file-other-window file) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
926 (if (> (buffer-size) 0) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
927 (unless (yes-or-no-p |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
928 (format "Overwrite non-empty file %s? " file)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
929 (error "Abort"))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
930 (erase-buffer) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
931 (setq all (delq nil |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
932 (mapcar |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
933 (lambda (x) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
934 (if marked |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
935 (if (or (and (assoc x marked) (not complement)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
936 (and (not (assoc x marked)) complement)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
937 (cdr (assoc "&entry" x)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
938 nil) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
939 (cdr (assoc "&entry" x)))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
940 all))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
941 (insert (mapconcat 'identity all "\n\n")) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
942 (save-buffer) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
943 (goto-char (point-min)))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
944 |
25280 | 945 (defun reftex-insert-bib-matches (list) |
946 ;; Insert the bib matches and number them correctly | |
947 (let ((mouse-face | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
948 (if (memq reftex-highlight-selection '(mouse both)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
949 reftex-mouse-selected-face |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
950 nil)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
951 tmp len) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
952 (mapcar |
25280 | 953 (lambda (x) |
954 (setq tmp (cdr (assoc "&formatted" x)) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
955 len (length tmp)) |
25280 | 956 (put-text-property 0 len :data x tmp) |
957 (put-text-property 0 (1- len) 'mouse-face mouse-face tmp) | |
958 (insert tmp)) | |
959 list)) | |
960 (run-hooks 'reftex-display-copied-context-hook)) | |
961 | |
962 (defun reftex-format-names (namelist n) | |
963 (let (last (len (length namelist))) | |
46612
7522419c4db0
Updated to reftex 4.17
Carsten Dominik <dominik@science.uva.nl>
parents:
46131
diff
changeset
|
964 (if (= n 0) (setq n len)) |
25280 | 965 (cond |
966 ((< len 1) "") | |
967 ((= 1 len) (car namelist)) | |
968 ((> len n) (concat (car namelist) (nth 2 reftex-cite-punctuation))) | |
969 (t | |
970 (setq n (min len n) | |
971 last (nth (1- n) namelist)) | |
972 (setcdr (nthcdr (- n 2) namelist) nil) | |
973 (concat | |
974 (mapconcat 'identity namelist (nth 0 reftex-cite-punctuation)) | |
975 (nth 1 reftex-cite-punctuation) | |
976 last))))) | |
977 | |
978 (defun reftex-format-citation (entry format) | |
979 ;; Format a citation from the info in the BibTeX ENTRY | |
980 | |
981 (unless (stringp format) (setq format "\\cite{%l}")) | |
982 | |
983 (if (and reftex-comment-citations | |
984 (string-match "%l" reftex-cite-comment-format)) | |
60918
58a53f588384
* textmodes/refbib.el, textmodes/refer.el, textmodes/reftex-cite.el,
Werner LEMBERG <wl@gnu.org>
parents:
60056
diff
changeset
|
985 (error "reftex-cite-comment-format contains invalid %%l")) |
25280 | 986 |
987 (while (string-match | |
988 "\\(\\`\\|[^%]\\)\\(\\(%\\([0-9]*\\)\\([a-zA-Z]\\)\\)[.,;: ]*\\)" | |
989 format) | |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
60918
diff
changeset
|
990 (let ((n (string-to-number (match-string 4 format))) |
25280 | 991 (l (string-to-char (match-string 5 format))) |
992 rpl b e) | |
993 (save-match-data | |
994 (setq rpl | |
995 (cond | |
996 ((= l ?l) (concat | |
997 (reftex-get-bib-field "&key" entry) | |
998 (if reftex-comment-citations | |
999 reftex-cite-comment-format | |
1000 ""))) | |
1001 ((= l ?a) (reftex-format-names | |
1002 (reftex-get-bib-names "author" entry) | |
1003 (or n 2))) | |
1004 ((= l ?A) (car (reftex-get-bib-names "author" entry))) | |
1005 ((= l ?b) (reftex-get-bib-field "booktitle" entry "in: %s")) | |
1006 ((= l ?B) (reftex-abbreviate-title | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1007 (reftex-get-bib-field "booktitle" entry "in: %s"))) |
25280 | 1008 ((= l ?c) (reftex-get-bib-field "chapter" entry)) |
1009 ((= l ?d) (reftex-get-bib-field "edition" entry)) | |
1010 ((= l ?e) (reftex-format-names | |
1011 (reftex-get-bib-names "editor" entry) | |
1012 (or n 2))) | |
1013 ((= l ?E) (car (reftex-get-bib-names "editor" entry))) | |
1014 ((= l ?h) (reftex-get-bib-field "howpublished" entry)) | |
1015 ((= l ?i) (reftex-get-bib-field "institution" entry)) | |
1016 ((= l ?j) (reftex-get-bib-field "journal" entry)) | |
1017 ((= l ?k) (reftex-get-bib-field "key" entry)) | |
1018 ((= l ?m) (reftex-get-bib-field "month" entry)) | |
1019 ((= l ?n) (reftex-get-bib-field "number" entry)) | |
1020 ((= l ?o) (reftex-get-bib-field "organization" entry)) | |
1021 ((= l ?p) (reftex-get-bib-field "pages" entry)) | |
1022 ((= l ?P) (car (split-string | |
1023 (reftex-get-bib-field "pages" entry) | |
1024 "[- .]+"))) | |
1025 ((= l ?s) (reftex-get-bib-field "school" entry)) | |
1026 ((= l ?u) (reftex-get-bib-field "publisher" entry)) | |
1027 ((= l ?r) (reftex-get-bib-field "address" entry)) | |
1028 ((= l ?t) (reftex-get-bib-field "title" entry)) | |
1029 ((= l ?T) (reftex-abbreviate-title | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1030 (reftex-get-bib-field "title" entry))) |
25280 | 1031 ((= l ?v) (reftex-get-bib-field "volume" entry)) |
1032 ((= l ?y) (reftex-get-bib-field "year" entry))))) | |
1033 | |
1034 (if (string= rpl "") | |
1035 (setq b (match-beginning 2) e (match-end 2)) | |
1036 (setq b (match-beginning 3) e (match-end 3))) | |
1037 (setq format (concat (substring format 0 b) rpl (substring format e))))) | |
1038 (while (string-match "%%" format) | |
1039 (setq format (replace-match "%" t t format))) | |
1040 (while (string-match "[ ,.;:]*%<" format) | |
1041 (setq format (replace-match "" t t format))) | |
1042 format) | |
1043 | |
1044 (defun reftex-make-cite-echo-string (entry docstruct-symbol) | |
1045 ;; Format a bibtex entry for the echo area and cache the result. | |
1046 (let* ((key (reftex-get-bib-field "&key" entry)) | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1047 (string |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1048 (let* ((reftex-cite-punctuation '(" " " & " " etal."))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1049 (reftex-format-citation entry reftex-cite-view-format))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1050 (cache (assq 'bibview-cache (symbol-value docstruct-symbol))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1051 (cache-entry (assoc key (cdr cache)))) |
25280 | 1052 (unless cache |
1053 ;; This docstruct has no cache - make one. | |
1054 (set docstruct-symbol (cons (cons 'bibview-cache nil) | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1055 (symbol-value docstruct-symbol)))) |
25280 | 1056 (when reftex-cache-cite-echo |
1057 (setq key (copy-sequence key)) | |
1058 (set-text-properties 0 (length key) nil key) | |
1059 (set-text-properties 0 (length string) nil string) | |
1060 (if cache-entry | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1061 (unless (string= (cdr cache-entry) string) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1062 (setcdr cache-entry string) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1063 (put reftex-docstruct-symbol 'modified t)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1064 (push (cons key string) (cdr cache)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1065 (put reftex-docstruct-symbol 'modified t))) |
25280 | 1066 string)) |
1067 | |
1068 (defun reftex-bibtex-selection-callback (data ignore no-revisit) | |
1069 ;; Callback function to be called from the BibTeX selection, in | |
1070 ;; order to display context. This function is relatively slow and not | |
1071 ;; recommended for follow mode. It works OK for individual lookups. | |
1072 (let ((win (selected-window)) | |
1073 (key (reftex-get-bib-field "&key" data)) | |
46973
11e08f9901ea
Update to RefTeX 4.18
Carsten Dominik <dominik@science.uva.nl>
parents:
46683
diff
changeset
|
1074 bibfile-list item bibtype) |
25280 | 1075 |
1076 (catch 'exit | |
1077 (save-excursion | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1078 (set-buffer reftex-call-back-to-this-buffer) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1079 (setq bibtype (reftex-bib-or-thebib)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1080 (cond |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1081 ((eq bibtype 'bib) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1082 ; ((assq 'bib (symbol-value reftex-docstruct-symbol)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1083 (setq bibfile-list (reftex-get-bibfile-list))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1084 ((eq bibtype 'thebib) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1085 ; ((assq 'thebib (symbol-value reftex-docstruct-symbol)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1086 (setq bibfile-list |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1087 (reftex-uniquify |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1088 (mapcar 'cdr |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1089 (reftex-all-assq |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1090 'thebib (symbol-value reftex-docstruct-symbol)))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1091 item t)) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1092 (reftex-default-bibliography |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1093 (setq bibfile-list (reftex-default-bibliography))) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1094 (t (ding) (throw 'exit nil)))) |
25280 | 1095 |
1096 (when no-revisit | |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1097 (setq bibfile-list (reftex-visited-files bibfile-list))) |
25280 | 1098 |
1099 (condition-case nil | |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1100 (reftex-pop-to-bibtex-entry |
52170
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1101 key bibfile-list (not reftex-keep-temporary-buffers) t item) |
27340819ef07
Updated to version 4.21
Carsten Dominik <dominik@science.uva.nl>
parents:
50976
diff
changeset
|
1102 (error (ding)))) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1103 |
25280 | 1104 (select-window win))) |
1105 | |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1106 ;;; Global BibTeX file |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1107 (defun reftex-all-used-citation-keys () |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1108 (reftex-access-scan-info) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1109 (let ((files (reftex-all-document-files)) file keys kk k) |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1110 (save-excursion |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1111 (while (setq file (pop files)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1112 (set-buffer (reftex-get-file-buffer-force file 'mark)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1113 (save-excursion |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1114 (save-restriction |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1115 (widen) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1116 (goto-char (point-min)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1117 (while (re-search-forward "^[^%\n\r]*\\\\\\(bibentry\\|[a-zA-Z]*cite[a-zA-Z]*\\)\\(\\[[^\\]]*\\]\\)?{\\([^}]+\\)}" nil t) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1118 (setq kk (match-string-no-properties 3)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1119 (while (string-match "%.*\n?" kk) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1120 (setq kk (replace-match "" t t kk))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1121 (setq kk (split-string kk "[, \t\r\n]+")) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1122 (while (setq k (pop kk)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1123 (or (member k keys) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1124 (setq keys (cons k keys))))))))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1125 (reftex-kill-temporary-buffers) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1126 keys)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1127 |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1128 (defun reftex-create-bibtex-file (bibfile) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1129 "Create a new BibTeX database file with all entries referenced in document. |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1130 The command prompts for a filename and writes the collected entries to |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1131 that file. Only entries referenced in the current document with |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1132 any \\cite-like macros are used. |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1133 The sequence in the new file is the same as it was in the old database." |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1134 (interactive "FNew BibTeX file: ") |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1135 (let ((keys (reftex-all-used-citation-keys)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1136 (files (reftex-get-bibfile-list)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1137 file key entries beg end entry) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1138 (save-excursion |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1139 (while (setq file (pop files)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1140 (set-buffer (reftex-get-file-buffer-force file 'mark)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1141 (reftex-with-special-syntax-for-bib |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1142 (save-excursion |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1143 (save-restriction |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1144 (widen) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1145 (goto-char (point-min)) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1146 (while (re-search-forward |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1147 "^[ \t]*@[a-zA-Z]+[ \t]*{\\([^ \t\r\n]+\\)," |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1148 nil t) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1149 (setq key (match-string 1) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1150 beg (match-beginning 0) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1151 end (progn |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1152 (goto-char (match-beginning 1)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1153 (condition-case nil |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1154 (up-list 1) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1155 (error (goto-char (match-end 0)))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1156 (point))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1157 (when (member key keys) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1158 (setq entry (buffer-substring beg end) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1159 entries (cons entry entries) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1160 keys (delete key keys))))))))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1161 (find-file-other-window bibfile) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1162 (if (> (buffer-size) 0) |
65548
253cad16882d
Little fixes to remove compiler warnings
Carsten Dominik <dominik@science.uva.nl>
parents:
64751
diff
changeset
|
1163 (unless (yes-or-no-p |
59534
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1164 (format "Overwrite non-empty file %s? " bibfile)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1165 (error "Abort"))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1166 (erase-buffer) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1167 (insert (mapconcat 'identity (reverse entries) "\n\n")) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1168 (goto-char (point-min)) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1169 (save-buffer) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1170 (message "%d entries extracted and copied to new database" |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1171 (length entries)))) |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1172 |
9bad65481674
2005-01-14 Carsten Dominik <dominik@science.uva.nl>
Carsten Dominik <dominik@science.uva.nl>
parents:
59373
diff
changeset
|
1173 |
52401 | 1174 ;;; arch-tag: d53d0a5a-ab32-4b52-a846-2a7c3527cd89 |
25280 | 1175 ;;; reftex-cite.el ends here |