;;; bibtex.el --- BibTeX mode for GNU Emacs -*- lexical-binding: t -*-
-;; Copyright (C) 1992, 1994-1999, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1992, 1994-1999, 2001-2016 Free Software Foundation,
;; Inc.
;; Author: Stefan Schoef <schoef@offis.uni-oldenburg.de>
OPTIONAL is a list of optional fields.
Each element of these lists is a list of the form
- \(FIELD COMMENT INIT ALTERNATIVE).
+ (FIELD COMMENT INIT ALTERNATIVE).
COMMENT, INIT, and ALTERNATIVE are optional.
FIELD is the name of the field.
"The tail of `bibtex-entry-kill-ring' whose car is the last item yanked.")
(defvar bibtex-last-kill-command nil
- "Type of the last kill command (either 'field or 'entry).")
+ "Type of the last kill command (either `field' or `entry').")
(defvar bibtex-strings
(lazy-completion-table bibtex-strings
(let* ((size (- (point-max) (point-min)))
(perc (if (= size 0)
100
- (/ (* 100 (- (point) (point-min))) size))))
+ (floor (* 100.0 (- (point) (point-min))) size))))
(when (>= perc (+ bibtex-progress-lastperc
bibtex-progress-interval))
(setq bibtex-progress-lastperc perc)
bibtex-entry-kill-ring))
;; If we copied an entry from a buffer containing only this one entry,
;; it can be missing the second "\n".
- (unless (looking-back "\n\n") (insert "\n"))
+ (unless (looking-back "\n\n" (- (point) 2)) (insert "\n"))
(unless (functionp bibtex-reference-keys)
;; update `bibtex-reference-keys'
(save-excursion
(defun bibtex-field-re-init (regexp-alist type)
"Calculate optimized value for bibtex-regexp-TYPE-opt.
-This value is based on bibtex-regexp-TYPE-alist. TYPE is 'braces or 'strings.
+This value is based on bibtex-regexp-TYPE-alist. TYPE is `braces' or `strings'.
Return optimized value to be used by `bibtex-format-entry'."
(setq regexp-alist
(mapcar (lambda (e)
"Get content of BibTeX field FIELD. Return empty string if not found.
Optional arg CHANGE-LIST is a list of substitution patterns that is
applied to the content of FIELD. It is an alist with pairs
-\(OLD-REGEXP . NEW-STRING\)."
+\(OLD-REGEXP . NEW-STRING)."
(let* ((bibtex-expand-strings bibtex-autokey-expand-strings)
(content (bibtex-text-in-field field bibtex-autokey-use-crossref))
case-fold-search)
(defun bibtex-autofill-entry ()
"Try to fill fields of current BibTeX entry based on neighboring entries.
The current entry must have a key. Determine the neighboring entry
-\(previous or next\) whose key is more similar to the key of the current
+\(previous or next) whose key is more similar to the key of the current
entry. For all empty fields of the current entry insert the corresponding
field contents of the neighboring entry. Finally try to update the text
based on the difference between the keys of the neighboring and the current
(cond ((not previous))
((member key key-list)
(push (cons (bibtex-current-line)
- (format "Duplicate key `%s'" key))
+ (format-message "Duplicate key `%s'" key))
error-list))
((and bibtex-maintain-sorted-entries
(not (bibtex-lessp previous current)))
(cdr (assoc-string (car key) bibtex-reference-keys)))
(bibtex-search-entry (car key))
(push (cons (bibtex-current-line)
- (format "Duplicate key `%s' in %s" (car key)
- (abbreviate-file-name (buffer-file-name buffer))))
+ (format-message
+ "Duplicate key `%s' in %s" (car key)
+ (abbreviate-file-name (buffer-file-name buffer))))
error-list))))
(when test-thoroughly
(if (setq idx (nth 3 field))
(bibtex-vec-push alt-expect idx (car field))
(push (cons beg-line
- (format "Required field `%s' missing"
- (car field)))
+ (format-message
+ "Required field `%s' missing"
+ (car field)))
error-list)))
(dotimes (idx num-alt)
(unless (aref alt-fields idx)
(push (cons beg-line
- (format "Alternative fields `%s' missing"
- (aref alt-expect idx)))
+ (format-message
+ "Alternative fields `%s' missing"
+ (aref alt-expect idx)))
error-list))))))))
(bibtex-progress-message 'done)))))
(unless (eq major-mode 'compilation-mode) (compilation-mode))
(let ((inhibit-read-only t))
(delete-region (point-min) (point-max))
- (insert "BibTeX mode command `bibtex-validate'\n"
+ (insert (substitute-command-keys
+ "BibTeX mode command `bibtex-validate'\n")
(if syntax-error
"Maybe undetected errors due to syntax errors. \
Correct and validate again.\n"
(goto-char (point-min))
(forward-line 2)) ; first error message
(display-buffer err-buf)
- nil) ; return `nil' (i.e., buffer is invalid)
+ nil) ; return nil (i.e., buffer is invalid)
(message "%s is syntactically correct"
(if mark-active "Region" "Buffer"))
- t))) ; return `t' (i.e., buffer is valid)
+ t))) ; return t (i.e., buffer is valid)
(defun bibtex-validate-globally (&optional strings)
"Check for duplicate keys in `bibtex-files'.
(if (or (and strings (bibtex-string= entry-type "string"))
(assoc-string entry-type bibtex-entry-alist t))
(if (member key key-list)
- (push (format "%s:%d: Duplicate key `%s'\n"
- (buffer-file-name)
- (bibtex-current-line) key)
+ (push (format-message
+ "%s:%d: Duplicate key `%s'\n"
+ (buffer-file-name)
+ (bibtex-current-line) key)
error-list)
(push key key-list))))
(push (cons buffer key-list) buffer-key-list)))))
(dolist (key (cdr (assq buffer buffer-key-list)))
(when (assoc-string key current-keys)
(bibtex-search-entry key)
- (push (format "%s:%d: Duplicate key `%s' in %s\n"
- (buffer-file-name) (bibtex-current-line) key
- (abbreviate-file-name (buffer-file-name buffer)))
+ (push (format-message
+ "%s:%d: Duplicate key `%s' in %s\n"
+ (buffer-file-name) (bibtex-current-line) key
+ (abbreviate-file-name (buffer-file-name buffer)))
error-list))))))
;; Process error list
(unless (eq major-mode 'compilation-mode) (compilation-mode))
(let ((inhibit-read-only t))
(delete-region (point-min) (point-max))
- (insert "BibTeX mode command `bibtex-validate-globally'\n\n")
+ (insert (substitute-command-keys
+ "BibTeX mode command `bibtex-validate-globally'\n\n"))
(dolist (err (sort error-list 'string-lessp)) (insert err))
(set-buffer-modified-p nil))
(goto-char (point-min))
(forward-line 2)) ; first error message
(display-buffer err-buf)
- nil) ; return `nil' (i.e., buffer is invalid)
+ nil) ; return nil (i.e., buffer is invalid)
(message "No duplicate keys.")
- t))) ; return `t' (i.e., buffer is valid)
+ t))) ; return t (i.e., buffer is valid)
(defun bibtex-next-field (begin &optional comma)
"Move point to end of text of next BibTeX field or entry head.
"Browse a URL for the BibTeX entry at point.
Optional POS is the location of the BibTeX entry.
The URL is generated using the schemes defined in `bibtex-generate-url-list'
-\(see there\). If multiple schemes match for this entry, or the same scheme
+\(see there). If multiple schemes match for this entry, or the same scheme
matches more than once, use the one for which the first step's match is the
closest to POS. The URL is passed to `browse-url' unless NO-BROWSE is t.
Return the URL or nil if none can be generated."
(bibtex-display-entries entries)
(message "No BibTeX entries %smatching `%s'"
(if (string= "" field) ""
- (format "with field `%s' " field))
+ (format-message "with field `%s' " field))
regexp)))
entries))