Mercurial > emacs
diff lisp/textmodes/bibtex.el @ 101233:680e69b3c8ed
(bibtex-format-entry): For updating field delimiters, allow
fields that are composed of strings and string constants.
(bibtex-mode): Doc fix.
author | Roland Winkler <Roland.Winkler@physik.uni-erlangen.de> |
---|---|
date | Fri, 16 Jan 2009 14:21:26 +0000 |
parents | bd632099967a |
children | 33b2514969f5 |
line wrap: on
line diff
--- a/lisp/textmodes/bibtex.el Fri Jan 16 14:04:35 2009 +0000 +++ b/lisp/textmodes/bibtex.el Fri Jan 16 14:21:26 2009 +0000 @@ -1892,6 +1892,8 @@ last-comma delimiters unify-case braces strings) bibtex-entry-format)) + (left-delim-re (regexp-quote (bibtex-field-left-delimiter))) + (right-delim-re (regexp-quote (bibtex-field-right-delimiter))) bounds crossref-key req-field-list default-field-list field-list alt-fields error-field-name) (unwind-protect @@ -1998,13 +2000,22 @@ ;; update delimiters (when (memq 'delimiters format) (goto-char beg-text) - (when (looking-at "[{\"]") - (delete-char 1) - (insert (bibtex-field-left-delimiter))) - (goto-char (1- (marker-position end-text))) - (when (looking-at "[}\"]") - (delete-char 1) - (insert (bibtex-field-right-delimiter)))) + ;; simplified from `bibtex-parse-field-text', as we + ;; already checked that the field format is correct + (while (< (point) end-text) + (if (looking-at bibtex-field-const) + (goto-char (match-end 0)) + (let ((boundaries (bibtex-parse-field-string))) + (unless (looking-at right-delim-re) + (delete-char 1) + (insert (bibtex-field-left-delimiter))) + (goto-char (1- (cdr boundaries))) + (if (looking-at left-delim-re) + (forward-char) + (delete-char 1) + (insert (bibtex-field-right-delimiter))))) + (if (looking-at "[ \t\n]*#[ \t\n]*") + (goto-char (match-end 0))))) ;; update page dashes (if (and (memq 'page-dashes format) @@ -2014,7 +2025,9 @@ "\\([\"{][0-9]+\\)[ \t\n]*--?[ \t\n]*\\([0-9]+[\"}]\\)"))) (replace-match "\\1-\\2")) - ;; remove whitespace at beginning and end of field + ;; Remove whitespace at beginning and end of field. + ;; We do not look at individual parts of the field + ;; as {foo } # bar # { baz} is a fine field. (when (memq 'whitespace format) (goto-char beg-text) (if (looking-at "\\([{\"]\\)[ \t\n]+") @@ -2932,7 +2945,7 @@ General information on working with BibTeX mode: -Use commands such as \\[bibtex-Book] to get a template for a specific entry. +Use commands such as \\<bibtex-mode-map>\\[bibtex-Book] to get a template for a specific entry. Then fill in all desired fields using \\[bibtex-next-field] to jump from field to field. After having filled in all desired fields in the entry, clean the new entry with the command \\[bibtex-clean-entry].