2324 |
(let* ((case-fold-search t) |
(let* ((case-fold-search t) |
2325 |
(reference-keys (if add bibtex-reference-keys))) |
(reference-keys (if add bibtex-reference-keys))) |
2326 |
(save-excursion |
(save-excursion |
2327 |
(goto-char (point-min)) |
(save-match-data |
2328 |
(if verbose |
(goto-char (point-min)) |
|
(bibtex-progress-message |
|
|
(concat (buffer-name) ": parsing reference keys"))) |
|
|
(if (catch 'userkey |
|
|
(bibtex-skip-to-valid-entry) |
|
|
(while (not (eobp)) |
|
|
(if (and |
|
|
abortable |
|
|
(input-pending-p)) |
|
|
(throw 'userkey t)) |
|
|
(if verbose |
|
|
(bibtex-progress-message)) |
|
|
(let (reference-key |
|
|
xrefd-reference-key) |
|
|
(cond |
|
|
((looking-at bibtex-entry-head) |
|
|
(setq |
|
|
reference-key |
|
|
(buffer-substring-no-properties |
|
|
(match-beginning bibtex-key-in-head) |
|
|
(match-end bibtex-key-in-head))) |
|
|
(let ((p (point)) |
|
|
(m (bibtex-end-of-entry))) |
|
|
(goto-char p) |
|
|
(let ((bounds (bibtex-search-forward-field "crossref" m))) |
|
|
(if bounds |
|
|
(setq |
|
|
xrefd-reference-key |
|
|
(buffer-substring-no-properties |
|
|
(1+ (bibtex-start-of-text-in-field bounds)) |
|
|
(1- (bibtex-end-of-text-in-field bounds)))))))) |
|
|
((bibtex-parse-string) |
|
|
(let ((bounds (bibtex-parse-string))) |
|
|
(setq |
|
|
reference-key |
|
|
(buffer-substring-no-properties |
|
|
(bibtex-start-of-reference-key-in-string bounds) |
|
|
(bibtex-end-of-reference-key-in-string bounds)))))) |
|
|
(forward-char) |
|
|
(bibtex-skip-to-valid-entry) |
|
|
(if (not (assoc reference-key reference-keys)) |
|
|
(setq reference-keys |
|
|
(cons (list reference-key) reference-keys))) |
|
|
(if (and xrefd-reference-key |
|
|
(not (assoc xrefd-reference-key reference-keys))) |
|
|
(setq reference-keys |
|
|
(cons (list xrefd-reference-key) reference-keys)))))) |
|
|
;; user has aborted by typing a key --> return nil |
|
|
nil |
|
|
;; successful operation --> return t |
|
|
(setq |
|
|
bibtex-buffer-last-parsed-tick (buffer-modified-tick) |
|
|
bibtex-reference-keys reference-keys) |
|
2329 |
(if verbose |
(if verbose |
2330 |
(bibtex-progress-message 'done)) |
(bibtex-progress-message |
2331 |
t))))) |
(concat (buffer-name) ": parsing reference keys"))) |
2332 |
|
(if (catch 'userkey |
2333 |
|
(bibtex-skip-to-valid-entry) |
2334 |
|
(while (not (eobp)) |
2335 |
|
(if (and |
2336 |
|
abortable |
2337 |
|
(input-pending-p)) |
2338 |
|
(throw 'userkey t)) |
2339 |
|
(if verbose |
2340 |
|
(bibtex-progress-message)) |
2341 |
|
(let (reference-key |
2342 |
|
xrefd-reference-key) |
2343 |
|
(cond |
2344 |
|
((looking-at bibtex-entry-head) |
2345 |
|
(setq |
2346 |
|
reference-key |
2347 |
|
(buffer-substring-no-properties |
2348 |
|
(match-beginning bibtex-key-in-head) |
2349 |
|
(match-end bibtex-key-in-head))) |
2350 |
|
(let ((p (point)) |
2351 |
|
(m (bibtex-end-of-entry))) |
2352 |
|
(goto-char p) |
2353 |
|
(let ((bounds (bibtex-search-forward-field "crossref" m))) |
2354 |
|
(if bounds |
2355 |
|
(setq |
2356 |
|
xrefd-reference-key |
2357 |
|
(buffer-substring-no-properties |
2358 |
|
(1+ (bibtex-start-of-text-in-field bounds)) |
2359 |
|
(1- (bibtex-end-of-text-in-field bounds)))))))) |
2360 |
|
((bibtex-parse-string) |
2361 |
|
(let ((bounds (bibtex-parse-string))) |
2362 |
|
(setq |
2363 |
|
reference-key |
2364 |
|
(buffer-substring-no-properties |
2365 |
|
(bibtex-start-of-reference-key-in-string bounds) |
2366 |
|
(bibtex-end-of-reference-key-in-string bounds)))))) |
2367 |
|
(forward-char) |
2368 |
|
(bibtex-skip-to-valid-entry) |
2369 |
|
(if (not (assoc reference-key reference-keys)) |
2370 |
|
(setq reference-keys |
2371 |
|
(cons (list reference-key) reference-keys))) |
2372 |
|
(if (and xrefd-reference-key |
2373 |
|
(not (assoc xrefd-reference-key reference-keys))) |
2374 |
|
(setq reference-keys |
2375 |
|
(cons (list xrefd-reference-key) reference-keys)))))) |
2376 |
|
;; user has aborted by typing a key --> return nil |
2377 |
|
nil |
2378 |
|
;; successful operation --> return t |
2379 |
|
(setq |
2380 |
|
bibtex-buffer-last-parsed-tick (buffer-modified-tick) |
2381 |
|
bibtex-reference-keys reference-keys) |
2382 |
|
(if verbose |
2383 |
|
(bibtex-progress-message 'done)) |
2384 |
|
t)))))) |
2385 |
|
|
2386 |
(defun bibtex-parse-buffers-stealthily () |
(defun bibtex-parse-buffers-stealthily () |
2387 |
;; Called by bibtex-run-with-idle-timer. Whenever emacs has been idle |
;; Called by bibtex-run-with-idle-timer. Whenever emacs has been idle |
2701 |
(bibtex-run-with-idle-timer |
(bibtex-run-with-idle-timer |
2702 |
1 nil |
1 nil |
2703 |
(lambda () |
(lambda () |
2704 |
(bibtex-parse-keys nil t t)))) |
(bibtex-parse-keys nil nil t)))) |
2705 |
;; to get buffer parsed once if everything else (including things |
;; to get buffer parsed once if everything else (including things |
2706 |
;; installed in bibtex-mode-hook) has done its work |
;; installed in bibtex-mode-hook) has done its work |
2707 |
(if (not bibtex-parse-idle-timer) |
(if (not bibtex-parse-idle-timer) |