annotate lisp/textmodes/bibtex.el @ 111012:2b6e7f137773

Fix the MSDOS build broken by last revisions. msdos/sed1v2.inp: Use $(..) instead of ${..} in all edit commands. Needed because of changes in revno 101897. msdos/sed6.inp (mkinfodir): Edit to avoid Unix shell-isms. Needed because of changes in revno 101876. src/unexcoff.c (make_hdr): Fix prototype according to changes in revno 101757.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 15 Oct 2010 20:45:12 +0200
parents b10051866f51
children 029e4783cbae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; bibtex.el --- BibTeX mode for GNU Emacs
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
74509
f7702c5f335d Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 73792
diff changeset
3 ;; Copyright (C) 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106454
diff changeset
4 ;; 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 810
diff changeset
5
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
6 ;; Author: Stefan Schoef <schoef@offis.uni-oldenburg.de>
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
7 ;; Bengt Martensson <bengt@mathematik.uni-Bremen.de>
73792
9429d986b2d1 Fix typo in name of author of bibtex.el,
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 71044
diff changeset
8 ;; Marc Shapiro <marc.shapiro@acm.org>
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
9 ;; Mike Newton <newton@gumby.cs.caltech.edu>
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
10 ;; Aaron Larson <alarson@src.honeywell.com>
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
11 ;; Dirk Herrmann <D.Herrmann@tu-bs.de>
110227
6f57977b6f9e Update email of Roland Winkler <winkler@gnu.org>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106837
diff changeset
12 ;; Maintainer: Roland Winkler <winkler@gnu.org>
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
13 ;; Keywords: BibTeX, LaTeX, TeX
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
14
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; This file is part of GNU Emacs.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
94670
f4a69fedbd46 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92218
diff changeset
17 ;; GNU Emacs is free software: you can redistribute it and/or modify
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; it under the terms of the GNU General Public License as published by
94670
f4a69fedbd46 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92218
diff changeset
19 ;; the Free Software Foundation, either version 3 of the License, or
f4a69fedbd46 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92218
diff changeset
20 ;; (at your option) any later version.
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 ;; GNU Emacs is distributed in the hope that it will be useful,
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 ;; GNU General Public License for more details.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 ;; You should have received a copy of the GNU General Public License
94670
f4a69fedbd46 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92218
diff changeset
28 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
30 ;;; Commentary:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13968
diff changeset
31
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
32 ;; Major mode for editing and validating BibTeX files.
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
34 ;; Usage:
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
35 ;; See documentation for `bibtex-mode' or type "M-x describe-mode"
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
36 ;; when you are in BibTeX mode.
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
37
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
38 ;; Todo:
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
39 ;; Distribute texinfo file.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
40
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
41 ;;; Code:
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
42
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
43 (require 'button)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
44
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
45
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
46 ;; User Options:
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
47
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
48 (defgroup bibtex nil
64054
23a07b9b6687 (bibtex, bibtex-autokey): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63470
diff changeset
49 "BibTeX mode."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
50 :group 'tex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
51 :prefix "bibtex-")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
52
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
53 (defgroup bibtex-autokey nil
64054
23a07b9b6687 (bibtex, bibtex-autokey): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63470
diff changeset
54 "Generate automatically a key from the author/editor and the title field."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
55 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
56 :prefix "bibtex-autokey-")
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
57
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
58 (defcustom bibtex-mode-hook nil
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
59 "List of functions to call on entry to BibTeX mode."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
60 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
61 :type 'hook)
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
62
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
63 (defcustom bibtex-field-delimiters 'braces
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
64 "Type of field delimiters. Allowed values are `braces' or `double-quotes'."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
65 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
66 :type '(choice (const braces)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
67 (const double-quotes)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
68
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
69 (defcustom bibtex-entry-delimiters 'braces
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
70 "Type of entry delimiters. Allowed values are `braces' or `parentheses'."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
71 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
72 :type '(choice (const braces)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
73 (const parentheses)))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
74
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
75 (defcustom bibtex-include-OPTcrossref '("InProceedings" "InCollection")
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
76 "List of BibTeX entries that get an OPTcrossref field."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
77 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
78 :type '(repeat string))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
79
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
80 (defcustom bibtex-include-OPTkey t
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
81 "If non-nil, all newly created entries get an OPTkey field.
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
82 If this is a string, use it as the initial field text.
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
83 If this is a function, call it to generate the initial field text."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
84 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
85 :type '(choice (const :tag "None" nil)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
86 (string :tag "Initial text")
77281
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
87 (function :tag "Initialize Function")
70808
0c087a8f2e1c (bibtex-maintain-sorted-entries): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70250
diff changeset
88 (const :tag "Default" t)))
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
89 (put 'bibtex-include-OPTkey 'risky-local-variable t)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
90
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
91 (defcustom bibtex-user-optional-fields
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
92 '(("annote" "Personal annotation (ignored)"))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
93 "List of optional fields the user wants to have always present.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
94 Entries should be of the same form as the OPTIONAL and
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
95 CROSSREF-OPTIONAL lists in `bibtex-entry-field-alist' (which see)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
96 :group 'bibtex
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
97 :type '(repeat (group (string :tag "Field")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
98 (string :tag "Comment")
77281
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
99 (option (choice :tag "Init"
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
100 (const nil) string function)))))
70249
eb2b6bd1c6f0 (bibtex-user-optional-fields): Mark as risky.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70210
diff changeset
101 (put 'bibtex-user-optional-fields 'risky-local-variable t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
102
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
103 (defcustom bibtex-entry-format
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
104 '(opts-or-alts required-fields numerical-fields)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
105 "Type of formatting performed by `bibtex-clean-entry'.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
106 It may be t, nil, or a list of symbols out of the following:
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
107 opts-or-alts Delete empty optional and alternative fields and
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
108 remove OPT and ALT prefixes from used fields.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
109 required-fields Signal an error if a required field is missing.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
110 numerical-fields Delete delimiters around numeral fields.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
111 page-dashes Change double dashes in page field to single dash
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
112 (for scribe compatibility).
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
113 whitespace Delete whitespace at the beginning and end of fields.
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
114 inherit-booktitle If entry contains a crossref field and the booktitle
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
115 field is empty, set the booktitle field to the content
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
116 of the title field of the crossreferenced entry.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
117 realign Realign entries, so that field texts and perhaps equal
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
118 signs (depending on the value of
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
119 `bibtex-align-at-equal-sign') begin in the same column.
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
120 Also fill fields.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
121 last-comma Add or delete comma on end of last field in entry,
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
122 according to value of `bibtex-comma-after-last-field'.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
123 delimiters Change delimiters according to variables
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
124 `bibtex-field-delimiters' and `bibtex-entry-delimiters'.
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
125 unify-case Change case of entry types and field names.
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
126 braces Enclose parts of field entries by braces according to
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
127 `bibtex-field-braces-alist'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
128 strings Replace parts of field entries by string constants
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
129 according to `bibtex-field-strings-alist'.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
130
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
131 The value t means do all of the above formatting actions.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
132 The value nil means do no formatting at all."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
133 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
134 :type '(choice (const :tag "None" nil)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
135 (const :tag "All" t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
136 (set :menu-tag "Some"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
137 (const opts-or-alts)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
138 (const required-fields)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
139 (const numerical-fields)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
140 (const page-dashes)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
141 (const whitespace)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
142 (const inherit-booktitle)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
143 (const realign)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
144 (const last-comma)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
145 (const delimiters)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
146 (const unify-case)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
147 (const braces)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
148 (const strings))))
97521
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
149 (put 'bibtex-entry-format 'safe-local-variable
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
150 (lambda (x)
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
151 (or (eq x t)
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
152 (let ((OK t))
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
153 (while (consp x)
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
154 (unless (memq (pop x)
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
155 '(opts-or-alts required-fields numerical-fields
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
156 page-dashes whitespace inherit-booktitle realign
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
157 last-comma delimiters unify-case braces strings))
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
158 (setq OK nil)))
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
159 (unless (null x) (setq OK nil))
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
160 OK))))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
161
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
162 (defcustom bibtex-field-braces-alist nil
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
163 "Alist of field regexps that \\[bibtex-clean-entry] encloses by braces.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
164 Each element has the form (FIELDS REGEXP), where FIELDS is a list
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
165 of BibTeX field names and REGEXP is a regexp.
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
166 Space characters in REGEXP will be replaced by \"[ \\t\\n]+\"."
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
167 :group 'bibtex
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
168 :type '(repeat (list (repeat (string :tag "field name"))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
169 (choice (regexp :tag "regexp")
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
170 (sexp :tag "sexp")))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
171
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
172 (defcustom bibtex-field-strings-alist nil
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
173 "Alist of regexps that \\[bibtex-clean-entry] replaces by string constants.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
174 Each element has the form (FIELDS REGEXP TO-STR), where FIELDS is a list
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
175 of BibTeX field names. In FIELDS search for REGEXP, which are replaced
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
176 by the BibTeX string constant TO-STR.
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
177 Space characters in REGEXP will be replaced by \"[ \\t\\n]+\"."
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
178 :group 'bibtex
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
179 :type '(repeat (list (repeat (string :tag "field name"))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
180 (regexp :tag "From regexp")
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
181 (regexp :tag "To string constant"))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
183 (defcustom bibtex-clean-entry-hook nil
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
184 "List of functions to call when entry has been cleaned.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
185 Functions are called with point inside the cleaned entry, and the buffer
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
186 narrowed to just the entry."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
187 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
188 :type 'hook)
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
189
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
190 (defcustom bibtex-maintain-sorted-entries nil
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
191 "If non-nil, BibTeX mode maintains all entries in sorted order.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
192 Allowed non-nil values are:
70808
0c087a8f2e1c (bibtex-maintain-sorted-entries): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70250
diff changeset
193 plain or t All entries are sorted alphabetically.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
194 crossref All entries are sorted alphabetically unless an entry has a
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
195 crossref field. These crossrefed entries are placed in
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
196 alphabetical order immediately preceding the main entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
197 entry-class The entries are divided into classes according to their
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
198 entry type, see `bibtex-sort-entry-class'. Within each class
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
199 the entries are sorted alphabetically.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
200 See also `bibtex-sort-ignore-string-entries'."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
201 :group 'bibtex
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
202 :type '(choice (const nil)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
203 (const plain)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
204 (const crossref)
70808
0c087a8f2e1c (bibtex-maintain-sorted-entries): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70250
diff changeset
205 (const entry-class)
0c087a8f2e1c (bibtex-maintain-sorted-entries): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70250
diff changeset
206 (const t)))
0c087a8f2e1c (bibtex-maintain-sorted-entries): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70250
diff changeset
207 (put 'bibtex-maintain-sorted-entries 'safe-local-variable
70837
c60679e723c7 (bibtex-maintain-sorted-entries): Quote safe-local-variable predicate.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 70808
diff changeset
208 '(lambda (a) (memq a '(nil t plain crossref entry-class))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
209
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
210 (defcustom bibtex-sort-entry-class
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
211 '(("String")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
212 (catch-all)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
213 ("Book" "Proceedings"))
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
214 "List of classes of BibTeX entry types, used for sorting entries.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
215 If value of `bibtex-maintain-sorted-entries' is `entry-class'
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
216 entries are ordered according to the classes they belong to. Each
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
217 class contains a list of entry types. An entry `catch-all' applies
59733
96d73eb02751 (bibtex-format-entry): Use `bibtex-empty-field-re' only on the text of
Lute Kamstra <lute@gnu.org>
parents: 58772
diff changeset
218 to all entries not explicitly mentioned."
105170
f8ba8d6fd250 Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 104774
diff changeset
219 :group 'bibtex
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
220 :type '(repeat (choice :tag "Class"
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
221 (const :tag "catch-all" (catch-all))
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
222 (repeat :tag "Entry type" string))))
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
223 (put 'bibtex-sort-entry-class 'safe-local-variable
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
224 (lambda (x) (let ((OK t))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
225 (while (consp x)
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
226 (let ((y (pop x)))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
227 (while (consp y)
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
228 (let ((z (pop y)))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
229 (unless (or (stringp z) (eq z 'catch-all))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
230 (setq OK nil))))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
231 (unless (null y) (setq OK nil))))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
232 (unless (null x) (setq OK nil))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
233 OK)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
234
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
235 (defcustom bibtex-sort-ignore-string-entries t
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
236 "If non-nil, BibTeX @String entries are not sort-significant.
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
237 That means they are ignored when determining ordering of the buffer
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
238 \(e.g., sorting, locating alphabetical position for new entries, etc.)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
239 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
240 :type 'boolean)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
241
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
242 (defcustom bibtex-field-kill-ring-max 20
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
243 "Max length of `bibtex-field-kill-ring' before discarding oldest elements."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
244 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
245 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
246
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
247 (defcustom bibtex-entry-kill-ring-max 20
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
248 "Max length of `bibtex-entry-kill-ring' before discarding oldest elements."
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
249 :group 'bibtex
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
250 :type 'integer)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
251
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
252 (defcustom bibtex-parse-keys-timeout 60
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
253 "Time interval in seconds for parsing BibTeX buffers during idle time.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
254 Parsing initializes `bibtex-reference-keys' and `bibtex-strings'."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
255 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
256 :type 'integer)
15637
405b1ecbf8ba (bibtex-reference-head): Allow spaces and tabs between
Karl Heuer <kwzh@gnu.org>
parents: 15565
diff changeset
257
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
258 (defcustom bibtex-parse-keys-fast t
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
259 "If non-nil, use fast but simplified algorithm for parsing BibTeX keys.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
260 If parsing fails, try to set this variable to nil."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
261 :group 'bibtex
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
262 :type 'boolean)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
263
77269
b9298f94662a (bibtex-entry-field-alist): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77217
diff changeset
264 (defcustom bibtex-entry-field-alist
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
265 '(("Article"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
266 ((("author" "Author1 [and Author2 ...] [and others]")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
267 ("title" "Title of the article (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
268 ("journal" "Name of the journal (use string, remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
269 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
270 (("volume" "Volume of the journal")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
271 ("number" "Number of the journal (only allowed if entry contains volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
272 ("pages" "Pages in the journal")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
273 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
274 ("note" "Remarks to be put at the end of the \\bibitem")))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
275 ((("author" "Author1 [and Author2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
276 ("title" "Title of the article (BibTeX converts it to lowercase)"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
277 (("pages" "Pages in the journal")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
278 ("journal" "Name of the journal (use string, remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
279 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
280 ("volume" "Volume of the journal")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
281 ("number" "Number of the journal")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
282 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
283 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
284 ("Book"
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
285 ((("author" "Author1 [and Author2 ...] [and others]" nil t)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
286 ("editor" "Editor1 [and Editor2 ...] [and others]" nil t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
287 ("title" "Title of the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
288 ("publisher" "Publishing company")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
289 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
290 (("volume" "Volume of the book in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
291 ("number" "Number of the book in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
292 ("series" "Series in which the book appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
293 ("address" "Address of the publisher")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
294 ("edition" "Edition of the book as a capitalized English word")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
295 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
296 ("note" "Remarks to be put at the end of the \\bibitem")))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
297 ((("author" "Author1 [and Author2 ...] [and others]" nil t)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
298 ("editor" "Editor1 [and Editor2 ...] [and others]" nil t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
299 ("title" "Title of the book"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
300 (("publisher" "Publishing company")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
301 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
302 ("volume" "Volume of the book in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
303 ("number" "Number of the book in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
304 ("series" "Series in which the book appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
305 ("address" "Address of the publisher")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
306 ("edition" "Edition of the book as a capitalized English word")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
307 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
308 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
309 ("Booklet"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
310 ((("title" "Title of the booklet (BibTeX converts it to lowercase)"))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
311 (("author" "Author1 [and Author2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
312 ("howpublished" "The way in which the booklet was published")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
313 ("address" "Address of the publisher")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
314 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
315 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
316 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
317 ("InBook"
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
318 ((("author" "Author1 [and Author2 ...] [and others]" nil t)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
319 ("editor" "Editor1 [and Editor2 ...] [and others]" nil t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
320 ("title" "Title of the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
321 ("chapter" "Chapter in the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
322 ("publisher" "Publishing company")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
323 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
324 (("volume" "Volume of the book in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
325 ("number" "Number of the book in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
326 ("series" "Series in which the book appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
327 ("type" "Word to use instead of \"chapter\"")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
328 ("address" "Address of the publisher")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
329 ("edition" "Edition of the book as a capitalized English word")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
330 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
331 ("pages" "Pages in the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
332 ("note" "Remarks to be put at the end of the \\bibitem")))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
333 ((("author" "Author1 [and Author2 ...] [and others]" nil t)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
334 ("editor" "Editor1 [and Editor2 ...] [and others]" nil t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
335 ("title" "Title of the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
336 ("chapter" "Chapter in the book"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
337 (("pages" "Pages in the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
338 ("publisher" "Publishing company")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
339 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
340 ("volume" "Volume of the book in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
341 ("number" "Number of the book in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
342 ("series" "Series in which the book appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
343 ("type" "Word to use instead of \"chapter\"")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
344 ("address" "Address of the publisher")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
345 ("edition" "Edition of the book as a capitalized English word")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
346 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
347 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
348 ("InCollection"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
349 ((("author" "Author1 [and Author2 ...] [and others]")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
350 ("title" "Title of the article in book (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
351 ("booktitle" "Name of the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
352 ("publisher" "Publishing company")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
353 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
354 (("editor" "Editor1 [and Editor2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
355 ("volume" "Volume of the book in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
356 ("number" "Number of the book in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
357 ("series" "Series in which the book appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
358 ("type" "Word to use instead of \"chapter\"")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
359 ("chapter" "Chapter in the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
360 ("pages" "Pages in the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
361 ("address" "Address of the publisher")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
362 ("edition" "Edition of the book as a capitalized English word")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
363 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
364 ("note" "Remarks to be put at the end of the \\bibitem")))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
365 ((("author" "Author1 [and Author2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
366 ("title" "Title of the article in book (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
367 ("booktitle" "Name of the book"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
368 (("pages" "Pages in the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
369 ("publisher" "Publishing company")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
370 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
371 ("editor" "Editor1 [and Editor2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
372 ("volume" "Volume of the book in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
373 ("number" "Number of the book in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
374 ("series" "Series in which the book appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
375 ("type" "Word to use instead of \"chapter\"")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
376 ("chapter" "Chapter in the book")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
377 ("address" "Address of the publisher")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
378 ("edition" "Edition of the book as a capitalized English word")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
379 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
380 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
381 ("InProceedings"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
382 ((("author" "Author1 [and Author2 ...] [and others]")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
383 ("title" "Title of the article in proceedings (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
384 ("booktitle" "Name of the conference proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
385 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
386 (("editor" "Editor1 [and Editor2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
387 ("volume" "Volume of the conference proceedings in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
388 ("number" "Number of the conference proceedings in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
389 ("series" "Series in which the conference proceedings appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
390 ("pages" "Pages in the conference proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
391 ("address" "Location of the Proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
392 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
393 ("organization" "Sponsoring organization of the conference")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
394 ("publisher" "Publishing company, its location")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
395 ("note" "Remarks to be put at the end of the \\bibitem")))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
396 ((("author" "Author1 [and Author2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
397 ("title" "Title of the article in proceedings (BibTeX converts it to lowercase)"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
398 (("booktitle" "Name of the conference proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
399 ("pages" "Pages in the conference proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
400 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
401 ("editor" "Editor1 [and Editor2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
402 ("volume" "Volume of the conference proceedings in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
403 ("number" "Number of the conference proceedings in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
404 ("series" "Series in which the conference proceedings appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
405 ("address" "Location of the Proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
406 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
407 ("organization" "Sponsoring organization of the conference")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
408 ("publisher" "Publishing company, its location")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
409 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
410 ("Manual"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
411 ((("title" "Title of the manual"))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
412 (("author" "Author1 [and Author2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
413 ("organization" "Publishing organization of the manual")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
414 ("address" "Address of the organization")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
415 ("edition" "Edition of the manual as a capitalized English word")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
416 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
417 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
418 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
419 ("MastersThesis"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
420 ((("author" "Author1 [and Author2 ...] [and others]")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
421 ("title" "Title of the master\'s thesis (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
422 ("school" "School where the master\'s thesis was written")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
423 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
424 (("type" "Type of the master\'s thesis (if other than \"Master\'s thesis\")")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
425 ("address" "Address of the school (if not part of field \"school\") or country")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
426 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
427 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
428 ("Misc"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
429 (()
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
430 (("author" "Author1 [and Author2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
431 ("title" "Title of the work (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
432 ("howpublished" "The way in which the work was published")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
433 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
434 ("year" "Year of publication")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
435 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
436 ("PhdThesis"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
437 ((("author" "Author1 [and Author2 ...] [and others]")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
438 ("title" "Title of the PhD. thesis")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
439 ("school" "School where the PhD. thesis was written")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
440 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
441 (("type" "Type of the PhD. thesis")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
442 ("address" "Address of the school (if not part of field \"school\") or country")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
443 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
444 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
445 ("Proceedings"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
446 ((("title" "Title of the conference proceedings")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
447 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
448 (("booktitle" "Title of the proceedings for cross references")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
449 ("editor" "Editor1 [and Editor2 ...] [and others]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
450 ("volume" "Volume of the conference proceedings in the series")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
451 ("number" "Number of the conference proceedings in a small series (overwritten by volume)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
452 ("series" "Series in which the conference proceedings appeared")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
453 ("address" "Location of the Proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
454 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
455 ("organization" "Sponsoring organization of the conference")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
456 ("publisher" "Publishing company, its location")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
457 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
458 ("TechReport"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
459 ((("author" "Author1 [and Author2 ...] [and others]")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
460 ("title" "Title of the technical report (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
461 ("institution" "Sponsoring institution of the report")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
462 ("year" "Year of publication"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
463 (("type" "Type of the report (if other than \"technical report\")")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
464 ("number" "Number of the technical report")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
465 ("address" "Address of the institution (if not part of field \"institution\") or country")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
466 ("month" "Month of the publication as a string (remove braces)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
467 ("note" "Remarks to be put at the end of the \\bibitem"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
468 ("Unpublished"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
469 ((("author" "Author1 [and Author2 ...] [and others]")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
470 ("title" "Title of the unpublished work (BibTeX converts it to lowercase)")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
471 ("note" "Remarks to be put at the end of the \\bibitem"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
472 (("month" "Month of the publication as a string (remove braces)")
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
473 ("year" "Year of publication")))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
474
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
475 "List of BibTeX entry types and their associated fields.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
476 List elements are triples
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
477 \(ENTRY-TYPE (REQUIRED OPTIONAL) (CROSSREF-REQUIRED CROSSREF-OPTIONAL)).
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
478 ENTRY-TYPE is the type of a BibTeX entry. The remaining pairs contain
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
479 the required and optional fields of the BibTeX entry.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
480 The second pair is used if a crossref field is present
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
481 and the first pair is used if a crossref field is absent.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
482 If the second pair is nil, the first pair is always used.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
483 REQUIRED, OPTIONAL, CROSSREF-REQUIRED and CROSSREF-OPTIONAL are lists.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
484 Each element of these lists is a list of the form
43950
5ef8be2a8db1 (bibtex-sort-ignore-string-entries)
Pavel Janík <Pavel@Janik.cz>
parents: 43758
diff changeset
485 \(FIELD-NAME COMMENT-STRING INIT ALTERNATIVE-FLAG).
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
486 COMMENT-STRING, INIT, and ALTERNATIVE-FLAG are optional.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
487 FIELD-NAME is the name of the field, COMMENT-STRING is the comment that
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
488 appears in the echo area, INIT is either the initial content of the
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
489 field or a function, which is called to determine the initial content
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
490 of the field, and ALTERNATIVE-FLAG (either nil or t) marks if the
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
491 field is an alternative. ALTERNATIVE-FLAG may be t only in the
77269
b9298f94662a (bibtex-entry-field-alist): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77217
diff changeset
492 REQUIRED or CROSSREF-REQUIRED lists."
b9298f94662a (bibtex-entry-field-alist): Use defcustom.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77217
diff changeset
493 :group 'bibtex
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
494 :type '(repeat (group (string :tag "Entry type")
77281
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
495 (group (repeat :tag "Required fields"
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
496 (group (string :tag "Field")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
497 (string :tag "Comment")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
498 (option (choice :tag "Init" :value nil
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
499 (const nil) string function))
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
500 (option (choice :tag "Alternative"
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
501 (const :tag "No" nil)
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
502 (const :tag "Yes" t)))))
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
503 (repeat :tag "Optional fields"
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
504 (group (string :tag "Field")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
505 (string :tag "Comment")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
506 (option (choice :tag "Init" :value nil
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
507 (const nil) string function)))))
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
508 (option :extra-offset -4
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
509 (group (repeat :tag "Crossref: required fields"
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
510 (group (string :tag "Field")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
511 (string :tag "Comment")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
512 (option (choice :tag "Init" :value nil
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
513 (const nil) string function))
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
514 (option (choice :tag "Alternative"
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
515 (const :tag "No" nil)
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
516 (const :tag "Yes" t)))))
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
517 (repeat :tag "Crossref: optional fields"
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
518 (group (string :tag "Field")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
519 (string :tag "Comment")
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
520 (option (choice :tag "Init" :value nil
372e6a7ea660 (bibtex-include-OPTkey, bibtex-user-optional-fields)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77269
diff changeset
521 (const nil) string function)))))))))
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
522 (put 'bibtex-entry-field-alist 'risky-local-variable t)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
523
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
524 (defcustom bibtex-comment-start "@Comment"
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
525 "String starting a BibTeX comment."
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
526 :group 'bibtex
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
527 :type 'string)
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
528
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
529 (defcustom bibtex-add-entry-hook nil
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
530 "List of functions to call when BibTeX entry has been inserted."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
531 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
532 :type 'hook)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
533
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
534 (defcustom bibtex-predefined-month-strings
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
535 '(("jan" . "January")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
536 ("feb" . "February")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
537 ("mar" . "March")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
538 ("apr" . "April")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
539 ("may" . "May")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
540 ("jun" . "June")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
541 ("jul" . "July")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
542 ("aug" . "August")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
543 ("sep" . "September")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
544 ("oct" . "October")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
545 ("nov" . "November")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
546 ("dec" . "December"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
547 "Alist of month string definitions used in the BibTeX style files.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
548 Each element is a pair of strings (ABBREVIATION . EXPANSION)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
549 :group 'bibtex
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
550 :type '(repeat (cons (string :tag "Month abbreviation")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
551 (string :tag "Month expansion"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
552
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
553 (defcustom bibtex-predefined-strings
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
554 (append
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
555 bibtex-predefined-month-strings
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
556 '(("acmcs" . "ACM Computing Surveys")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
557 ("acta" . "Acta Informatica")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
558 ("cacm" . "Communications of the ACM")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
559 ("ibmjrd" . "IBM Journal of Research and Development")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
560 ("ibmsj" . "IBM Systems Journal")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
561 ("ieeese" . "IEEE Transactions on Software Engineering")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
562 ("ieeetc" . "IEEE Transactions on Computers")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
563 ("ieeetcad" . "IEEE Transactions on Computer-Aided Design of Integrated Circuits")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
564 ("ipl" . "Information Processing Letters")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
565 ("jacm" . "Journal of the ACM")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
566 ("jcss" . "Journal of Computer and System Sciences")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
567 ("scp" . "Science of Computer Programming")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
568 ("sicomp" . "SIAM Journal on Computing")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
569 ("tcs" . "Theoretical Computer Science")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
570 ("tocs" . "ACM Transactions on Computer Systems")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
571 ("tods" . "ACM Transactions on Database Systems")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
572 ("tog" . "ACM Transactions on Graphics")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
573 ("toms" . "ACM Transactions on Mathematical Software")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
574 ("toois" . "ACM Transactions on Office Information Systems")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
575 ("toplas" . "ACM Transactions on Programming Languages and Systems")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
576 "Alist of string definitions used in the BibTeX style files.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
577 Each element is a pair of strings (ABBREVIATION . EXPANSION)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
578 :group 'bibtex
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
579 :type '(repeat (cons (string :tag "String")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
580 (string :tag "String expansion"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
581
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
582 (defcustom bibtex-string-files nil
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
583 "List of BibTeX files containing string definitions.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
584 List elements can be absolute file names or file names relative
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
585 to the directories specified in `bibtex-string-file-path'."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
586 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
587 :type '(repeat file))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
588
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
589 (defvar bibtex-string-file-path (getenv "BIBINPUTS")
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
590 "*Colon separated list of paths to search for `bibtex-string-files'.")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
591
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
592 (defcustom bibtex-files nil
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
593 "List of BibTeX files that are searched for entry keys.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
594 List elements can be absolute file names or file names relative to the
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
595 directories specified in `bibtex-file-path'. If an element is a directory,
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
596 check all BibTeX files in this directory. If an element is the symbol
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
597 `bibtex-file-path', check all BibTeX files in `bibtex-file-path'."
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
598 :group 'bibtex
75356
2600e61a031f (bibtex-files): Fix customization type.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 75347
diff changeset
599 :type '(repeat (choice (const :tag "bibtex-file-path" bibtex-file-path)
2600e61a031f (bibtex-files): Fix customization type.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 75347
diff changeset
600 directory file)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
601
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
602 (defvar bibtex-file-path (getenv "BIBINPUTS")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
603 "*Colon separated list of paths to search for `bibtex-files'.")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
604
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
605 (defcustom bibtex-help-message t
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
606 "If non-nil print help messages in the echo area on entering a new field."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
607 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
608 :type 'boolean)
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
609
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
610 (defcustom bibtex-autokey-prefix-string ""
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
611 "String prefix for automatically generated reference keys.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
612 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
613 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
614 :type 'string)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
615
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
616 (defcustom bibtex-autokey-names 1
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
617 "Number of names to use for the automatically generated reference key.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
618 Possibly more names are used according to `bibtex-autokey-names-stretch'.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
619 If this variable is nil, all names are used.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
620 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
621 :group 'bibtex-autokey
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
622 :type '(choice (const :tag "All" infty)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
623 integer))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
624
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
625 (defcustom bibtex-autokey-names-stretch 0
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
626 "Number of names that can additionally be used for reference keys.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
627 These names are used only, if all names are used then.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
628 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
629 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
630 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
631
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
632 (defcustom bibtex-autokey-additional-names ""
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
633 "String to append to the generated key if not all names could be used.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
634 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
635 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
636 :type 'string)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
637
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
638 (defcustom bibtex-autokey-expand-strings nil
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
639 "If non-nil, expand strings when extracting the content of a BibTeX field.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
640 See `bibtex-generate-autokey' for details."
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
641 :group 'bibtex-autokey
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
642 :type 'boolean)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
643
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
644 (defvar bibtex-autokey-transcriptions
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
645 '(;; language specific characters
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
646 ("\\\\aa" . "a") ; \aa -> a
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
647 ("\\\\AA" . "A") ; \AA -> A
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
648 ("\\\"a\\|\\\\\\\"a\\|\\\\ae" . "ae") ; "a,\"a,\ae -> ae
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
649 ("\\\"A\\|\\\\\\\"A\\|\\\\AE" . "Ae") ; "A,\"A,\AE -> Ae
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
650 ("\\\\i" . "i") ; \i -> i
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
651 ("\\\\j" . "j") ; \j -> j
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
652 ("\\\\l" . "l") ; \l -> l
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
653 ("\\\\L" . "L") ; \L -> L
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
654 ("\\\"o\\|\\\\\\\"o\\|\\\\o\\|\\\\oe" . "oe") ; "o,\"o,\o,\oe -> oe
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
655 ("\\\"O\\|\\\\\\\"O\\|\\\\O\\|\\\\OE" . "Oe") ; "O,\"O,\O,\OE -> Oe
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
656 ("\\\"s\\|\\\\\\\"s\\|\\\\3" . "ss") ; "s,\"s,\3 -> ss
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
657 ("\\\"u\\|\\\\\\\"u" . "ue") ; "u,\"u -> ue
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
658 ("\\\"U\\|\\\\\\\"U" . "Ue") ; "U,\"U -> Ue
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
659 ;; accents
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
660 ("\\\\`\\|\\\\'\\|\\\\\\^\\|\\\\~\\|\\\\=\\|\\\\\\.\\|\\\\u\\|\\\\v\\|\\\\H\\|\\\\t\\|\\\\c\\|\\\\d\\|\\\\b" . "")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
661 ;; braces, quotes, concatenation.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
662 ("[`'\"{}#]" . "")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
663 ;; spaces
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
664 ("\\\\?[ \t\n]+\\|~" . " "))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
665 "Alist of (OLD-REGEXP . NEW-STRING) pairs.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
666 Used by the default values of `bibtex-autokey-name-change-strings' and
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
667 `bibtex-autokey-titleword-change-strings'. Defaults to translating some
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
668 language specific characters to their ASCII transcriptions, and
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
669 removing any character accents.")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
670
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
671 (defcustom bibtex-autokey-name-change-strings
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
672 bibtex-autokey-transcriptions
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
673 "Alist of (OLD-REGEXP . NEW-STRING) pairs.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
674 Any part of a name matching OLD-REGEXP is replaced by NEW-STRING.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
675 Case is significant in OLD-REGEXP. All regexps are tried in the
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
676 order in which they appear in the list.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
677 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
678 :group 'bibtex-autokey
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
679 :type '(repeat (cons (regexp :tag "Old")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
680 (string :tag "New"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
681
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
682 (defcustom bibtex-autokey-name-case-convert-function 'downcase
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
683 "Function called for each name to perform case conversion.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
684 See `bibtex-generate-autokey' for details."
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
685 :group 'bibtex-autokey
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
686 :type '(choice (const :tag "Preserve case" identity)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
687 (const :tag "Downcase" downcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
688 (const :tag "Capitalize" capitalize)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
689 (const :tag "Upcase" upcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
690 (function :tag "Conversion function")))
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
691 (put 'bibtex-autokey-name-case-convert-function 'safe-local-variable
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
692 (lambda (x) (memq x '(upcase downcase capitalize identity))))
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
693 (defvaralias 'bibtex-autokey-name-case-convert
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
694 'bibtex-autokey-name-case-convert-function)
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
695
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
696 (defcustom bibtex-autokey-name-length 'infty
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
697 "Number of characters from name to incorporate into key.
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
698 If this is set to anything but a number, all characters are used.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
699 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
700 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
701 :type '(choice (const :tag "All" infty)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
702 integer))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
703
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
704 (defcustom bibtex-autokey-name-separator ""
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
705 "String that comes between any two names in the key.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
706 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
707 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
708 :type 'string)
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
709
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
710 (defcustom bibtex-autokey-year-length 2
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
711 "Number of rightmost digits from the year field to incorporate into key.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
712 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
713 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
714 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
715
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
716 (defcustom bibtex-autokey-use-crossref t
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
717 "If non-nil use fields from crossreferenced entry if necessary.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
718 If this variable is non-nil and some field has no entry, but a
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
719 valid crossref entry, the field from the crossreferenced entry is used.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
720 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
721 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
722 :type 'boolean)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
723
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
724 (defcustom bibtex-autokey-titlewords 5
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
725 "Number of title words to use for the automatically generated reference key.
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
726 If this is set to anything but a number, all title words are used.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
727 Possibly more words from the title are used according to
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
728 `bibtex-autokey-titlewords-stretch'.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
729 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
730 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
731 :type '(choice (const :tag "All" infty)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
732 integer))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
733
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
734 (defcustom bibtex-autokey-title-terminators "[.!?:;]\\|--"
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
735 "Regexp defining the termination of the main part of the title.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
736 Case of the regexps is ignored. See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
737 :group 'bibtex-autokey
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
738 :type 'regexp)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
739
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
740 (defcustom bibtex-autokey-titlewords-stretch 2
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
741 "Number of words that can additionally be used from the title.
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
742 These words are used only, if a sentence from the title can be ended then.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
743 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
744 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
745 :type 'integer)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
746
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
747 (defcustom bibtex-autokey-titleword-ignore
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
748 '("A" "An" "On" "The" "Eine?" "Der" "Die" "Das"
102133
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
749 "[^[:upper:]].*" ".*[^[:upper:][:lower:]0-9].*")
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
750 "Determines words from the title that are not to be used in the key.
59733
96d73eb02751 (bibtex-format-entry): Use `bibtex-empty-field-re' only on the text of
Lute Kamstra <lute@gnu.org>
parents: 58772
diff changeset
751 Each item of the list is a regexp. If a word of the title matches a
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
752 regexp from that list, it is not included in the title part of the key.
102133
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
753 Case is significant. See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
754 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
755 :type '(repeat regexp))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
756
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
757 (defcustom bibtex-autokey-titleword-case-convert-function 'downcase
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
758 "Function called for each titleword to perform case conversion.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
759 See `bibtex-generate-autokey' for details."
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
760 :group 'bibtex-autokey
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
761 :type '(choice (const :tag "Preserve case" identity)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
762 (const :tag "Downcase" downcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
763 (const :tag "Capitalize" capitalize)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
764 (const :tag "Upcase" upcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
765 (function :tag "Conversion function")))
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
766 (defvaralias 'bibtex-autokey-titleword-case-convert
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
767 'bibtex-autokey-titleword-case-convert-function)
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
768
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
769 (defcustom bibtex-autokey-titleword-abbrevs nil
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
770 "Determines exceptions to the usual abbreviation mechanism.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
771 An alist of (OLD-REGEXP . NEW-STRING) pairs. Case is ignored
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
772 in matching against OLD-REGEXP, and the first matching pair is used.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
773 See `bibtex-generate-autokey' for details."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
774 :group 'bibtex-autokey
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
775 :type '(repeat (cons (regexp :tag "Old")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
776 (string :tag "New"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
777
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
778 (defcustom bibtex-autokey-titleword-change-strings
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
779 bibtex-autokey-transcriptions
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
780 "Alist of (OLD-REGEXP . NEW-STRING) pairs.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
781 Any part of title word matching a OLD-REGEXP is replaced by NEW-STRING.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
782 Case is significant in OLD-REGEXP. All regexps are tried in the
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
783 order in which they appear in the list.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
784 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
785 :group 'bibtex-autokey
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
786 :type '(repeat (cons (regexp :tag "Old")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
787 (string :tag "New"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
788
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
789 (defcustom bibtex-autokey-titleword-length 5
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
790 "Number of characters from title words to incorporate into key.
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
791 If this is set to anything but a number, all characters are used.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
792 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
793 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
794 :type '(choice (const :tag "All" infty)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
795 integer))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
796
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
797 (defcustom bibtex-autokey-titleword-separator "_"
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
798 "String to be put between the title words.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
799 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
800 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
801 :type 'string)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
802
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
803 (defcustom bibtex-autokey-name-year-separator ""
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
804 "String to be put between name part and year part of key.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
805 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
806 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
807 :type 'string)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
808
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
809 (defcustom bibtex-autokey-year-title-separator ":_"
97521
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
810 "String to be put between year part and title part of key.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
811 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
812 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
813 :type 'string)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
814
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
815 (defcustom bibtex-autokey-edit-before-use t
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
816 "If non-nil, user is allowed to edit the generated key before it is used."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
817 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
818 :type 'boolean)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
819
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
820 (defcustom bibtex-autokey-before-presentation-function nil
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
821 "If non-nil, function to call before generated key is presented.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
822 The function must take one argument (the automatically generated key),
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
823 and must return a string (the key to use)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
824 :group 'bibtex-autokey
35962
ad7104908c16 (bibtex-autokey-before-presentation-function): Fix :type.
Dave Love <fx@gnu.org>
parents: 27701
diff changeset
825 :type '(choice (const nil) function))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
826
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
827 (defcustom bibtex-entry-offset 0
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
828 "Offset for BibTeX entries.
59733
96d73eb02751 (bibtex-format-entry): Use `bibtex-empty-field-re' only on the text of
Lute Kamstra <lute@gnu.org>
parents: 58772
diff changeset
829 Added to the value of all other variables which determine columns."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
830 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
831 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
832
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
833 (defcustom bibtex-field-indentation 2
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
834 "Starting column for the name part in BibTeX fields."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
835 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
836 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
837
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
838 (defcustom bibtex-text-indentation
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
839 (+ bibtex-field-indentation
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
840 (length "organization = "))
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
841 "Starting column for the text part in BibTeX fields.
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
842 Should be equal to the space needed for the longest name part."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
843 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
844 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
845
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
846 (defcustom bibtex-contline-indentation
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
847 (+ bibtex-text-indentation 1)
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
848 "Starting column for continuation lines of BibTeX fields."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
849 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
850 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
851
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
852 (defcustom bibtex-align-at-equal-sign nil
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
853 "If non-nil, align fields at equal sign instead of field text.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
854 If non-nil, the column for the equal sign is the value of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
855 `bibtex-text-indentation', minus 2."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
856 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
857 :type 'boolean)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
858
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
859 (defcustom bibtex-comma-after-last-field nil
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
860 "If non-nil, a comma is put at end of last field in the entry template."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
861 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
862 :type 'boolean)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
863
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
864 (defcustom bibtex-autoadd-commas t
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
865 "If non-nil automatically add missing commas at end of BibTeX fields."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
866 :group 'bibtex
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
867 :type 'boolean)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
868
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
869 (defcustom bibtex-autofill-types '("Proceedings")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
870 "Automatically fill fields if possible for those BibTeX entry types."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
871 :group 'bibtex
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
872 :type '(repeat string))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
873
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
874 (defcustom bibtex-summary-function 'bibtex-summary
62077
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
875 "Function to call for generating a summary of current BibTeX entry.
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
876 It takes no arguments. Point must be at beginning of entry.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
877 Used by `bibtex-complete-crossref-cleanup' and `bibtex-copy-summary-as-kill'."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
878 :group 'bibtex
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
879 :type '(choice (const :tag "Default" bibtex-summary)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
880 (function :tag "Personalized function")))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
881
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
882 (defcustom bibtex-generate-url-list
61247
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
883 '((("url" . ".*:.*")))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
884 "List of schemes for generating the URL of a BibTeX entry.
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
885 These schemes are used by `bibtex-url'.
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
886
61247
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
887 Each scheme should have one of these forms:
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
888
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
889 ((FIELD . REGEXP))
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
890 ((FIELD . REGEXP) STEP...)
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
891 ((FIELD . REGEXP) STRING STEP...)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
892
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
893 FIELD is a field name as returned by `bibtex-parse-entry'.
61247
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
894 REGEXP is matched against the text of FIELD. If the match succeeds,
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
895 then this scheme is used. If no STRING and STEPs are specified
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
896 the matched text is used as the URL, otherwise the URL is built
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
897 by evaluating STEPs. If no STRING is specified the STEPs must result
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
898 in strings which are concatenated. Otherwise the resulting objects
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
899 are passed through `format' using STRING as format control string.
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
900
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
901 A STEP is a list (FIELD REGEXP REPLACE). The text of FIELD
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
902 is matched against REGEXP, and is replaced with REPLACE.
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
903 REPLACE can be a string, or a number (which selects the corresponding
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
904 submatch), or a function called with the field's text as argument
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
905 and with the `match-data' properly set.
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
906
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
907 Case is always ignored. Always remove the field delimiters.
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
908 If `bibtex-expand-strings' is non-nil, BibTeX strings are expanded
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
909 for generating the URL.
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
910 Set this variable before loading BibTeX mode.
61247
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
911
106454
d218ddb3768e (bibtex-enclosing-field): Exclude entry delimiter if it is at the end
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106426
diff changeset
912 The following is a complex example, see URL `http://link.aps.org/'.
61247
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
913
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
914 (((\"journal\" . \"\\\\=<\\(PR[ABCDEL]?\\|RMP\\)\\\\=>\")
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
915 \"http://link.aps.org/abstract/%s/v%s/p%s\"
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
916 (\"journal\" \".*\" downcase)
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
917 (\"volume\" \".*\" 0)
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
918 (\"pages\" \"\\`[A-Z]?[0-9]+\" 0)))"
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
919 :group 'bibtex
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
920 :type '(repeat
61247
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
921 (cons :tag "Scheme"
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
922 (cons :tag "Matcher" :extra-offset 4
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
923 (string :tag "BibTeX field")
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
924 (regexp :tag "Regexp"))
61247
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
925 (choice
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
926 (const :tag "Take match as is" nil)
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
927 (cons :tag "Formatted"
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
928 (string :tag "Format control string")
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
929 (repeat :tag "Steps to generate URL"
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
930 (list (string :tag "BibTeX field")
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
931 (regexp :tag "Regexp")
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
932 (choice (string :tag "Replacement")
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
933 (integer :tag "Sub-match")
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
934 (function :tag "Filter")))))
d11749d2bcff (bibtex-url): Use format to generate the url.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59733
diff changeset
935 (repeat :tag "Concatenated"
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
936 (list (string :tag "BibTeX field")
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
937 (regexp :tag "Regexp")
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
938 (choice (string :tag "Replacement")
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
939 (integer :tag "Sub-match")
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
940 (function :tag "Filter"))))))))
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
941 (put 'bibtex-generate-url-list 'risky-local-variable t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
942
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
943 (defcustom bibtex-cite-matcher-alist
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
944 '(("\\\\cite[ \t\n]*{\\([^}]+\\)}" . 1))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
945 "Alist of rules to identify cited keys in a BibTeX entry.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
946 Each rule should be of the form (REGEXP . SUBEXP), where SUBEXP
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
947 specifies which parenthesized expression in REGEXP is a cited key.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
948 Case is significant.
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
949 Used by `bibtex-search-crossref' and for font-locking.
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
950 Set this variable before loading BibTeX mode."
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
951 :group 'bibtex
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
952 :type '(repeat (cons (regexp :tag "Regexp")
100439
5de002dfa264 * face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents: 97521
diff changeset
953 (integer :tag "Number")))
5de002dfa264 * face-remap.el (text-scale-mode-step, buffer-face-mode-face):
Juanma Barranquero <lekktu@gmail.com>
parents: 97521
diff changeset
954 :version "23.1")
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
955
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
956 (defcustom bibtex-expand-strings nil
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
957 "If non-nil, expand strings when extracting the content of a BibTeX field."
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
958 :group 'bibtex
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
959 :type 'boolean)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
960
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
961 ;; `bibtex-font-lock-keywords' is a user option, too. But since the
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
962 ;; patterns used to define this variable are defined in a later
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
963 ;; section of this file, it is defined later.
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
964
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
965
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
966 ;; Syntax Table and Keybindings
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
967 (defvar bibtex-mode-syntax-table
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
968 (let ((st (make-syntax-table)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
969 (modify-syntax-entry ?\" "\"" st)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
970 (modify-syntax-entry ?$ "$$ " st)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
971 (modify-syntax-entry ?% "< " st)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
972 (modify-syntax-entry ?' "w " st)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
973 (modify-syntax-entry ?@ "w " st)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
974 (modify-syntax-entry ?\\ "\\" st)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
975 (modify-syntax-entry ?\f "> " st)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
976 (modify-syntax-entry ?\n "> " st)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
977 ;; Keys cannot have = in them (wrong font-lock of @string{foo=bar}).
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
978 (modify-syntax-entry ?= "." st)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
979 (modify-syntax-entry ?~ " " st)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
980 st)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
981 "Syntax table used in BibTeX mode buffers.")
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
982
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
983 (defvar bibtex-mode-map
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
984 (let ((km (make-sparse-keymap)))
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
985 ;; The Key `C-c&' is reserved for reftex.el
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
986 (define-key km "\t" 'bibtex-find-text)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
987 (define-key km "\n" 'bibtex-next-field)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
988 (define-key km "\M-\t" 'bibtex-complete)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
989 (define-key km "\C-c\"" 'bibtex-remove-delimiters)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
990 (define-key km "\C-c{" 'bibtex-remove-delimiters)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
991 (define-key km "\C-c}" 'bibtex-remove-delimiters)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
992 (define-key km "\C-c\C-c" 'bibtex-clean-entry)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
993 (define-key km "\C-c\C-q" 'bibtex-fill-entry)
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
994 (define-key km "\C-c\C-s" 'bibtex-search-entry)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
995 (define-key km "\C-c\C-x" 'bibtex-search-crossref)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
996 (define-key km "\C-c\C-t" 'bibtex-copy-summary-as-kill)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
997 (define-key km "\C-c?" 'bibtex-print-help-message)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
998 (define-key km "\C-c\C-p" 'bibtex-pop-previous)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
999 (define-key km "\C-c\C-n" 'bibtex-pop-next)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1000 (define-key km "\C-c\C-k" 'bibtex-kill-field)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1001 (define-key km "\C-c\M-k" 'bibtex-copy-field-as-kill)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1002 (define-key km "\C-c\C-w" 'bibtex-kill-entry)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1003 (define-key km "\C-c\M-w" 'bibtex-copy-entry-as-kill)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1004 (define-key km "\C-c\C-y" 'bibtex-yank)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1005 (define-key km "\C-c\M-y" 'bibtex-yank-pop)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1006 (define-key km "\C-c\C-d" 'bibtex-empty-field)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1007 (define-key km "\C-c\C-f" 'bibtex-make-field)
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1008 (define-key km "\C-c\C-u" 'bibtex-entry-update)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1009 (define-key km "\C-c$" 'bibtex-ispell-abstract)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1010 (define-key km "\M-\C-a" 'bibtex-beginning-of-entry)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1011 (define-key km "\M-\C-e" 'bibtex-end-of-entry)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1012 (define-key km "\C-\M-l" 'bibtex-reposition-window)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1013 (define-key km "\C-\M-h" 'bibtex-mark-entry)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1014 (define-key km "\C-c\C-b" 'bibtex-entry)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1015 (define-key km "\C-c\C-rn" 'bibtex-narrow-to-entry)
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1016 (define-key km "\C-c\C-rw" 'widen)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1017 (define-key km "\C-c\C-l" 'bibtex-url)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1018 (define-key km "\C-c\C-o" 'bibtex-remove-OPT-or-ALT)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1019 (define-key km "\C-c\C-e\C-i" 'bibtex-InProceedings)
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1020 (define-key km "\C-c\C-ei" 'bibtex-InCollection)
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1021 (define-key km "\C-c\C-eI" 'bibtex-InBook)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1022 (define-key km "\C-c\C-e\C-a" 'bibtex-Article)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1023 (define-key km "\C-c\C-e\C-b" 'bibtex-InBook)
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1024 (define-key km "\C-c\C-eb" 'bibtex-Book)
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1025 (define-key km "\C-c\C-eB" 'bibtex-Booklet)
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1026 (define-key km "\C-c\C-e\C-c" 'bibtex-InCollection)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1027 (define-key km "\C-c\C-e\C-m" 'bibtex-Manual)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1028 (define-key km "\C-c\C-em" 'bibtex-MastersThesis)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1029 (define-key km "\C-c\C-eM" 'bibtex-Misc)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1030 (define-key km "\C-c\C-e\C-p" 'bibtex-InProceedings)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1031 (define-key km "\C-c\C-ep" 'bibtex-Proceedings)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1032 (define-key km "\C-c\C-eP" 'bibtex-PhdThesis)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1033 (define-key km "\C-c\C-e\M-p" 'bibtex-Preamble)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1034 (define-key km "\C-c\C-e\C-s" 'bibtex-String)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1035 (define-key km "\C-c\C-e\C-t" 'bibtex-TechReport)
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1036 (define-key km "\C-c\C-e\C-u" 'bibtex-Unpublished)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1037 km)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1038 "Keymap used in BibTeX mode.")
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1039
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1040 (easy-menu-define
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1041 bibtex-edit-menu bibtex-mode-map "BibTeX-Edit Menu in BibTeX mode"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1042 '("BibTeX-Edit"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1043 ("Moving inside an Entry"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1044 ["End of Field" bibtex-find-text t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1045 ["Next Field" bibtex-next-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1046 ["Beginning of Entry" bibtex-beginning-of-entry t]
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
1047 ["End of Entry" bibtex-end-of-entry t]
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
1048 "--"
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
1049 ["Make Entry Visible" bibtex-reposition-window t])
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1050 ("Moving in BibTeX Buffers"
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1051 ["Search Entry" bibtex-search-entry t]
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1052 ["Search Crossref Entry" bibtex-search-crossref t])
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1053 "--"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1054 ("Operating on Current Field"
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1055 ["Fill Field" fill-paragraph t]
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1056 ["Remove Delimiters" bibtex-remove-delimiters t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1057 ["Remove OPT or ALT Prefix" bibtex-remove-OPT-or-ALT t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1058 ["Clear Field" bibtex-empty-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1059 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1060 ["Kill Field" bibtex-kill-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1061 ["Copy Field to Kill Ring" bibtex-copy-field-as-kill t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1062 ["Paste Most Recently Killed Field" bibtex-yank t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1063 ["Paste Previously Killed Field" bibtex-yank-pop t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1064 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1065 ["Make New Field" bibtex-make-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1066 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1067 ["Snatch from Similar Following Field" bibtex-pop-next t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1068 ["Snatch from Similar Preceding Field" bibtex-pop-previous t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1069 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1070 ["String or Key Complete" bibtex-complete t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1071 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1072 ["Help about Current Field" bibtex-print-help-message t])
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1073 ("Operating on Current Entry"
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1074 ["Fill Entry" bibtex-fill-entry t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1075 ["Clean Entry" bibtex-clean-entry t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1076 ["Update Entry" bibtex-entry-update t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1077 "--"
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1078 ["Kill Entry" bibtex-kill-entry t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1079 ["Copy Entry to Kill Ring" bibtex-copy-entry-as-kill t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1080 ["Paste Most Recently Killed Entry" bibtex-yank t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1081 ["Paste Previously Killed Entry" bibtex-yank-pop t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1082 "--"
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1083 ["Copy Summary to Kill Ring" bibtex-copy-summary-as-kill t]
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1084 ["Browse URL" bibtex-url t]
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1085 "--"
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1086 ["Ispell Entry" bibtex-ispell-entry t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1087 ["Ispell Entry Abstract" bibtex-ispell-abstract t]
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1088 "--"
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1089 ["Narrow to Entry" bibtex-narrow-to-entry t]
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1090 ["Mark Entry" bibtex-mark-entry t]
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1091 "--"
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1092 ["View Cite Locations (RefTeX)" reftex-view-crossref-from-bibtex
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1093 (fboundp 'reftex-view-crossref-from-bibtex)])
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1094 ("Operating on Buffer or Region"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1095 ["Validate Entries" bibtex-validate t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1096 ["Sort Entries" bibtex-sort-buffer t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1097 ["Reformat Entries" bibtex-reformat t]
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1098 ["Count Entries" bibtex-count-entries t]
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1099 "--"
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1100 ["Convert Alien Buffer" bibtex-convert-alien t])
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1101 ("Operating on Multiple Buffers"
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1102 ["(Re)Initialize BibTeX Buffers" bibtex-initialize t]
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1103 ["Validate Entries" bibtex-validate-globally t])))
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1104
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1105 (easy-menu-define
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1106 bibtex-entry-menu bibtex-mode-map "Entry-Types Menu in BibTeX mode"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1107 (list "Entry-Types"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1108 ["Article in Journal" bibtex-Article t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1109 ["Article in Conference Proceedings" bibtex-InProceedings t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1110 ["Article in a Collection" bibtex-InCollection t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1111 ["Chapter or Pages in a Book" bibtex-InBook t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1112 ["Conference Proceedings" bibtex-Proceedings t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1113 ["Book" bibtex-Book t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1114 ["Booklet (Bound, but no Publisher/Institution)" bibtex-Booklet t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1115 ["PhD. Thesis" bibtex-PhdThesis t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1116 ["Master's Thesis" bibtex-MastersThesis t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1117 ["Technical Report" bibtex-TechReport t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1118 ["Technical Manual" bibtex-Manual t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1119 ["Unpublished" bibtex-Unpublished t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1120 ["Miscellaneous" bibtex-Misc t]
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1121 "--"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1122 ["String" bibtex-String t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1123 ["Preamble" bibtex-Preamble t]))
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1124
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
1125
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
1126 ;; Internal Variables
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1127
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1128 (defvar bibtex-field-braces-opt nil
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1129 "Optimized value of `bibtex-field-braces-alist'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1130 Created by `bibtex-field-re-init'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1131 It is a an alist with elements (FIELD . REGEXP).")
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1132
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1133 (defvar bibtex-field-strings-opt nil
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1134 "Optimized value of `bibtex-field-strings-alist'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1135 Created by `bibtex-field-re-init'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1136 It is a an alist with elements (FIELD RULE1 RULE2 ...),
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1137 where each RULE is (REGEXP . TO-STR).")
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1138
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1139 (defvar bibtex-pop-previous-search-point nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1140 "Next point where `bibtex-pop-previous' starts looking for a similar entry.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1141
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1142 (defvar bibtex-pop-next-search-point nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1143 "Next point where `bibtex-pop-next' starts looking for a similar entry.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1144
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1145 (defvar bibtex-field-kill-ring nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1146 "Ring of least recently killed fields.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1147 At most `bibtex-field-kill-ring-max' items are kept here.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1148
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1149 (defvar bibtex-field-kill-ring-yank-pointer nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1150 "The tail of `bibtex-field-kill-ring' whose car is the last item yanked.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1151
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1152 (defvar bibtex-entry-kill-ring nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1153 "Ring of least recently killed entries.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1154 At most `bibtex-entry-kill-ring-max' items are kept here.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1155
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1156 (defvar bibtex-entry-kill-ring-yank-pointer nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1157 "The tail of `bibtex-entry-kill-ring' whose car is the last item yanked.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1158
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1159 (defvar bibtex-last-kill-command nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1160 "Type of the last kill command (either 'field or 'entry).")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1161
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1162 (defvar bibtex-strings
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1163 (lazy-completion-table bibtex-strings
67816
d195eef388b8 (bibtex-strings, bibtex-reference-keys):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67575
diff changeset
1164 (lambda ()
d195eef388b8 (bibtex-strings, bibtex-reference-keys):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67575
diff changeset
1165 (bibtex-parse-strings (bibtex-string-files-init))))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1166 "Completion table for BibTeX string keys.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1167 Initialized from `bibtex-predefined-strings' and `bibtex-string-files'.")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1168 (make-variable-buffer-local 'bibtex-strings)
68265
9e0c23ab13f9 (bibtex-strings, bibtex-reference-keys): Mark as risky.
Richard M. Stallman <rms@gnu.org>
parents: 68065
diff changeset
1169 (put 'bibtex-strings 'risky-local-variable t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1170
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1171 (defvar bibtex-reference-keys
67816
d195eef388b8 (bibtex-strings, bibtex-reference-keys):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67575
diff changeset
1172 (lazy-completion-table bibtex-reference-keys
d195eef388b8 (bibtex-strings, bibtex-reference-keys):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67575
diff changeset
1173 (lambda () (bibtex-parse-keys nil t)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1174 "Completion table for BibTeX reference keys.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1175 The CDRs of the elements are t for header keys and nil for crossref keys.")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1176 (make-variable-buffer-local 'bibtex-reference-keys)
68265
9e0c23ab13f9 (bibtex-strings, bibtex-reference-keys): Mark as risky.
Richard M. Stallman <rms@gnu.org>
parents: 68065
diff changeset
1177 (put 'bibtex-reference-keys 'risky-local-variable t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1178
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1179 (defvar bibtex-buffer-last-parsed-tick nil
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1180 "Value of `buffer-modified-tick' last time buffer was parsed for keys.")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1181
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1182 (defvar bibtex-parse-idle-timer nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1183 "Stores if timer is already installed.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1184
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1185 (defvar bibtex-progress-lastperc nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1186 "Last reported percentage for the progress message.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1187
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1188 (defvar bibtex-progress-lastmes nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1189 "Last reported progress message.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1190
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1191 (defvar bibtex-progress-interval nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1192 "Interval for progress messages.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1193
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1194 (defvar bibtex-key-history nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1195 "History list for reading keys.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1196
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1197 (defvar bibtex-entry-type-history nil
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1198 "History list for reading entry types.")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1199
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1200 (defvar bibtex-field-history nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1201 "History list for reading field names.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1202
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1203 (defvar bibtex-reformat-previous-options nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1204 "Last reformat options given.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1205
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1206 (defvar bibtex-reformat-previous-reference-keys nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1207 "Last reformat reference keys option given.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1208
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1209 (defconst bibtex-field-name "[^\"#%'(),={} \t\n0-9][^\"#%'(),={} \t\n]*"
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1210 "Regexp matching the name of a BibTeX field.")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1211
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1212 (defconst bibtex-name-part
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1213 (concat ",[ \t\n]*\\(" bibtex-field-name "\\)")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1214 "Regexp matching the name part of a BibTeX field.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1215
61439
267229876c56 (bibtex-autokey-titleword-ignore, bibtex-reference-key)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61247
diff changeset
1216 (defconst bibtex-reference-key "[][[:alnum:].:;?!`'/*@+|()<>&_^$-]+"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1217 "Regexp matching the reference key part of a BibTeX entry.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1218
61439
267229876c56 (bibtex-autokey-titleword-ignore, bibtex-reference-key)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61247
diff changeset
1219 (defconst bibtex-field-const "[][[:alnum:].:;?!`'/*@+=|<>&_^$-]+"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1220 "Regexp matching a BibTeX field constant.")
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1221
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1222 (defvar bibtex-entry-type
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1223 (concat "@[ \t]*\\(?:"
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1224 (regexp-opt (mapcar 'car bibtex-entry-field-alist)) "\\)")
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
1225 "Regexp matching the type of a BibTeX entry.")
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1226
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1227 (defvar bibtex-entry-head
15637
405b1ecbf8ba (bibtex-reference-head): Allow spaces and tabs between
Karl Heuer <kwzh@gnu.org>
parents: 15565
diff changeset
1228 (concat "^[ \t]*\\("
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1229 bibtex-entry-type
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1230 "\\)[ \t]*[({][ \t\n]*\\("
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1231 bibtex-reference-key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1232 "\\)")
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1233 "Regexp matching the header line of a BibTeX entry (including key).")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1234
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1235 (defvar bibtex-entry-maybe-empty-head
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1236 (concat bibtex-entry-head "?")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1237 "Regexp matching the header line of a BibTeX entry (possibly without key).")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1238
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1239 (defconst bibtex-any-entry-maybe-empty-head
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1240 (concat "^[ \t]*\\(@[ \t]*" bibtex-field-name "\\)[ \t]*[({][ \t\n]*\\("
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1241 bibtex-reference-key "\\)?")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1242 "Regexp matching the header line of any BibTeX entry (possibly without key).")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1243
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1244 (defvar bibtex-any-valid-entry-type
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1245 (concat "^[ \t]*@[ \t]*\\(?:"
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1246 (regexp-opt (append '("String" "Preamble")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1247 (mapcar 'car bibtex-entry-field-alist))) "\\)")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1248 "Regexp matching any valid BibTeX entry (including String and Preamble).")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1249
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1250 (defconst bibtex-type-in-head 1
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1251 "Regexp subexpression number of the type part in `bibtex-entry-head'.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1252
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1253 (defconst bibtex-key-in-head 2
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1254 "Regexp subexpression number of the key part in `bibtex-entry-head'.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1255
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1256 (defconst bibtex-string-type "^[ \t]*\\(@[ \t]*String\\)[ \t]*[({][ \t\n]*"
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1257 "Regexp matching the name of a BibTeX String entry.")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1258
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1259 (defconst bibtex-string-maybe-empty-head
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1260 (concat bibtex-string-type "\\(" bibtex-reference-key "\\)?")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1261 "Regexp matching the header line of a BibTeX String entry.")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1262
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1263 (defconst bibtex-preamble-prefix
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1264 "[ \t]*\\(@[ \t]*Preamble\\)[ \t]*[({][ \t\n]*"
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1265 "Regexp matching the prefix part of a BibTeX Preamble entry.")
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1266
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1267 (defconst bibtex-font-lock-syntactic-keywords
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1268 `((,(concat "^[ \t]*\\(" (substring bibtex-comment-start 0 1) "\\)"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1269 (substring bibtex-comment-start 1) "\\>")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1270 1 '(11))))
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1271
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
1272 (defvar bibtex-font-lock-keywords
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1273 ;; entry type and reference key
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1274 `((,bibtex-any-entry-maybe-empty-head
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1275 (,bibtex-type-in-head font-lock-function-name-face)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1276 (,bibtex-key-in-head font-lock-constant-face nil t))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1277 ;; optional field names (treated as comments)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1278 (,(concat "^[ \t]*\\(OPT" bibtex-field-name "\\)[ \t]*=")
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1279 1 font-lock-comment-face)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1280 ;; field names
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1281 (,(concat "^[ \t]*\\(" bibtex-field-name "\\)[ \t]*=")
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1282 1 font-lock-variable-name-face)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1283 ;; url
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1284 (bibtex-font-lock-url) (bibtex-font-lock-crossref)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1285 ;; cite
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1286 ,@(mapcar (lambda (matcher)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1287 `((lambda (bound) (bibtex-font-lock-cite ',matcher bound))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1288 bibtex-cite-matcher-alist))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1289 "*Default expressions to highlight in BibTeX mode.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1290
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1291 (defvar bibtex-font-lock-url-regexp
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1292 ;; Assume that field names begin at the beginning of a line.
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
1293 (concat "^[ \t]*"
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
1294 (regexp-opt (delete-dups (mapcar 'caar bibtex-generate-url-list)) t)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1295 "[ \t]*=[ \t]*")
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1296 "Regexp for `bibtex-font-lock-url' derived from `bibtex-generate-url-list'.")
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1297
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1298 (defvar bibtex-string-empty-key nil
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1299 "If non-nil, `bibtex-parse-string' accepts empty key.")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1300
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
1301 (defvar bibtex-sort-entry-class-alist nil
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1302 "Alist mapping entry types to their sorting index.
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1303 Auto-generated from `bibtex-sort-entry-class'.
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1304 Used when `bibtex-maintain-sorted-entries' is `entry-class'.")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1305
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1306
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1307 (defun bibtex-parse-association (parse-lhs parse-rhs)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1308 "Parse a string of the format <left-hand-side = right-hand-side>.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1309 The functions PARSE-LHS and PARSE-RHS are used to parse the corresponding
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1310 substrings. These functions are expected to return nil if parsing is not
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1311 successful. If the returned values of both functions are non-nil,
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1312 return a cons pair of these values. Do not move point."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1313 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1314 (save-excursion
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1315 (let ((left (funcall parse-lhs))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1316 right)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1317 (if (and left
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1318 (looking-at "[ \t\n]*=[ \t\n]*")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1319 (goto-char (match-end 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1320 (setq right (funcall parse-rhs)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1321 (cons left right))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1322
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1323 (defun bibtex-parse-field-name ()
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1324 "Parse the name part of a BibTeX field.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1325 If the field name is found, return a triple consisting of the position of the
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1326 very first character of the match, the actual starting position of the name
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1327 part and end position of the match. Move point to end of field name.
59733
96d73eb02751 (bibtex-format-entry): Use `bibtex-empty-field-re' only on the text of
Lute Kamstra <lute@gnu.org>
parents: 58772
diff changeset
1328 If `bibtex-autoadd-commas' is non-nil add missing comma at end of preceding
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1329 BibTeX field as necessary."
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1330 (cond ((looking-at bibtex-name-part)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1331 (goto-char (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1332 (list (match-beginning 0) (match-beginning 1) (match-end 0)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1333 ;; Maybe add a missing comma.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1334 ((and bibtex-autoadd-commas
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1335 (looking-at (concat "[ \t\n]*\\(?:" bibtex-field-name
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1336 "\\)[ \t\n]*=")))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1337 (skip-chars-backward " \t\n")
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1338 ;; It can be confusing if non-editing commands try to
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1339 ;; modify the buffer.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1340 (if buffer-read-only
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1341 (error "Comma missing at buffer position %s" (point)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1342 (insert ",")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1343 (forward-char -1)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1344 ;; Now try again.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1345 (bibtex-parse-field-name))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1346
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1347 (defconst bibtex-braced-string-syntax-table
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1348 (let ((st (make-syntax-table)))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1349 (modify-syntax-entry ?\{ "(}" st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1350 (modify-syntax-entry ?\} "){" st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1351 (modify-syntax-entry ?\[ "." st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1352 (modify-syntax-entry ?\] "." st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1353 (modify-syntax-entry ?\( "." st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1354 (modify-syntax-entry ?\) "." st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1355 (modify-syntax-entry ?\\ "." st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1356 (modify-syntax-entry ?\" "." st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1357 st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1358 "Syntax-table to parse matched braces.")
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1359
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1360 (defconst bibtex-quoted-string-syntax-table
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1361 (let ((st (make-syntax-table)))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1362 (modify-syntax-entry ?\\ "\\" st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1363 (modify-syntax-entry ?\" "\"" st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1364 st)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1365 "Syntax-table to parse matched quotes.")
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1366
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1367 (defun bibtex-parse-field-string ()
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1368 "Parse a BibTeX field string enclosed by braces or quotes.
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1369 If a syntactically correct string is found, a pair containing the start and
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1370 end position of the field string is returned, nil otherwise.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1371 Do not move point."
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1372 (let ((end-point
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1373 (or (and (eq (following-char) ?\")
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1374 (save-excursion
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1375 (with-syntax-table bibtex-quoted-string-syntax-table
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1376 (forward-sexp 1))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1377 (point)))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1378 (and (eq (following-char) ?\{)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1379 (save-excursion
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1380 (with-syntax-table bibtex-braced-string-syntax-table
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1381 (forward-sexp 1))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1382 (point))))))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1383 (if end-point
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1384 (cons (point) end-point))))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1385
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1386 (defun bibtex-parse-field-text ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1387 "Parse the text part of a BibTeX field.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1388 The text part is either a string, or an empty string, or a constant followed
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1389 by one or more <# (string|constant)> pairs. If a syntactically correct text
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1390 is found, a pair containing the start and end position of the text is
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1391 returned, nil otherwise. Move point to end of field text."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1392 (let ((starting-point (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1393 end-point failure boundaries)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1394 (while (not (or end-point failure))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1395 (cond ((looking-at bibtex-field-const)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1396 (goto-char (match-end 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1397 ((setq boundaries (bibtex-parse-field-string))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1398 (goto-char (cdr boundaries)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1399 ((setq failure t)))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1400 (if (looking-at "[ \t\n]*#[ \t\n]*")
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1401 (goto-char (match-end 0))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1402 (setq end-point (point))))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1403 (skip-chars-forward " \t\n")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1404 (if (and (not failure)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1405 end-point)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1406 (list starting-point end-point (point)))))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1407
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1408 (defun bibtex-parse-field ()
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1409 "Parse the BibTeX field beginning at the position of point.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1410 If a syntactically correct field is found, return a cons pair containing
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1411 the boundaries of the name and text parts of the field. Do not move point."
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1412 (bibtex-parse-association 'bibtex-parse-field-name
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1413 'bibtex-parse-field-text))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1414
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1415 (defsubst bibtex-start-of-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1416 (nth 0 (car bounds)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1417 (defsubst bibtex-start-of-name-in-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1418 (nth 1 (car bounds)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1419 (defsubst bibtex-end-of-name-in-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1420 (nth 2 (car bounds)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1421 (defsubst bibtex-start-of-text-in-field (bounds)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1422 (nth 1 bounds))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1423 (defsubst bibtex-end-of-text-in-field (bounds)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1424 (nth 2 bounds))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1425 (defsubst bibtex-end-of-field (bounds)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1426 (nth 3 bounds))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1427
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1428 (defun bibtex-search-forward-field (name &optional bound)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1429 "Search forward to find a BibTeX field of name NAME.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1430 If a syntactically correct field is found, return a pair containing
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1431 the boundaries of the name and text parts of the field. The search
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1432 is limited by optional arg BOUND. If BOUND is t the search is limited
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1433 by the end of the current entry. Do not move point."
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1434 (save-match-data
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1435 (save-excursion
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1436 (if (eq bound t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1437 (let ((regexp (concat bibtex-name-part "[ \t\n]*=\\|"
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1438 bibtex-any-entry-maybe-empty-head))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1439 (case-fold-search t) bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1440 (catch 'done
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1441 (if (looking-at "[ \t]*@") (goto-char (match-end 0)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1442 (while (and (not bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1443 (re-search-forward regexp nil t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1444 (if (match-beginning 2)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1445 ;; We found a new entry
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1446 (throw 'done nil)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1447 ;; We found a field
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1448 (goto-char (match-beginning 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1449 (setq bounds (bibtex-parse-field))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1450 ;; Step through all fields so that we cannot overshoot.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1451 (while bounds
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1452 (goto-char (bibtex-start-of-name-in-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1453 (if (looking-at name) (throw 'done bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1454 (goto-char (bibtex-end-of-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1455 (setq bounds (bibtex-parse-field)))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1456 ;; Bounded search or bound is nil (i.e. we cannot overshoot).
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1457 ;; Indeed, the search is bounded when `bibtex-search-forward-field'
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1458 ;; is called many times. So we optimize this part of this function.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1459 (let ((name-part (concat ",[ \t\n]*\\(" name "\\)[ \t\n]*=[ \t\n]*"))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1460 (case-fold-search t) left right)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1461 (while (and (not right)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1462 (re-search-forward name-part bound t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1463 (setq left (list (match-beginning 0) (match-beginning 1)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1464 (match-end 1))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1465 ;; Don't worry that the field text could be past bound.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1466 right (bibtex-parse-field-text)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1467 (if right (cons left right)))))))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1468
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1469 (defun bibtex-search-backward-field (name &optional bound)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1470 "Search backward to find a BibTeX field of name NAME.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1471 If a syntactically correct field is found, return a pair containing
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1472 the boundaries of the name and text parts of the field. The search
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1473 is limited by the optional arg BOUND. If BOUND is t the search is
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1474 limited by the beginning of the current entry. Do not move point."
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1475 (save-match-data
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1476 (if (eq bound t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1477 (setq bound (save-excursion (bibtex-beginning-of-entry))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1478 (let ((name-part (concat ",[ \t\n]*\\(" name "\\)[ \t\n]*=[ \t\n]*"))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1479 (case-fold-search t) left right)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1480 (save-excursion
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1481 ;; the parsing functions are not designed for parsing backwards :-(
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1482 (when (search-backward "," bound t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1483 (or (save-excursion
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1484 (when (looking-at name-part)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1485 (setq left (list (match-beginning 0) (match-beginning 1)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1486 (match-end 1)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1487 (goto-char (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1488 (setq right (bibtex-parse-field-text))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1489 (while (and (not right)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1490 (re-search-backward name-part bound t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1491 (setq left (list (match-beginning 0) (match-beginning 1)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1492 (match-end 1)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1493 (save-excursion
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1494 (goto-char (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1495 (setq right (bibtex-parse-field-text)))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1496 (if right (cons left right)))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1497
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1498 (defun bibtex-name-in-field (bounds &optional remove-opt-alt)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1499 "Get content of name in BibTeX field defined via BOUNDS.
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1500 If optional arg REMOVE-OPT-ALT is non-nil remove \"OPT\" and \"ALT\"."
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1501 (let ((name (buffer-substring-no-properties
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1502 (bibtex-start-of-name-in-field bounds)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1503 (bibtex-end-of-name-in-field bounds))))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1504 (if (and remove-opt-alt
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1505 (string-match "\\`\\(OPT\\|ALT\\)" name))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1506 (substring name 3)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1507 name)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1508
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1509 (defun bibtex-text-in-field-bounds (bounds &optional content)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1510 "Get text in BibTeX field defined via BOUNDS.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1511 If optional arg CONTENT is non-nil extract content of field
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1512 by removing field delimiters and concatenating the resulting string.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1513 If `bibtex-expand-strings' is non-nil, also expand BibTeX strings."
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1514 (if content
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1515 (save-excursion
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1516 (goto-char (bibtex-start-of-text-in-field bounds))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1517 (let ((epoint (bibtex-end-of-text-in-field bounds))
106385
cd8b405d57c6 (bibtex-complete-internal): Use completion-in-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105813
diff changeset
1518 content)
cd8b405d57c6 (bibtex-complete-internal): Use completion-in-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105813
diff changeset
1519 (while (< (point) epoint)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1520 (if (looking-at bibtex-field-const)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1521 (let ((mtch (match-string-no-properties 0)))
67897
823f54b91fe2 (bibtex-text-in-field-bounds): Handle case that assoc-string returns
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67894
diff changeset
1522 (push (or (if bibtex-expand-strings
823f54b91fe2 (bibtex-text-in-field-bounds): Handle case that assoc-string returns
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67894
diff changeset
1523 (cdr (assoc-string mtch (bibtex-strings) t)))
823f54b91fe2 (bibtex-text-in-field-bounds): Handle case that assoc-string returns
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67894
diff changeset
1524 mtch) content)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1525 (goto-char (match-end 0)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1526 (let ((bounds (bibtex-parse-field-string)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1527 (push (buffer-substring-no-properties
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1528 (1+ (car bounds)) (1- (cdr bounds))) content)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1529 (goto-char (cdr bounds))))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1530 (re-search-forward "\\=[ \t\n]*#[ \t\n]*" nil t))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1531 (apply 'concat (nreverse content))))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1532 (buffer-substring-no-properties (bibtex-start-of-text-in-field bounds)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1533 (bibtex-end-of-text-in-field bounds))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1534
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1535 (defun bibtex-text-in-field (field &optional follow-crossref)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1536 "Get content of field FIELD of current BibTeX entry.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1537 Return nil if not found.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1538 If optional arg FOLLOW-CROSSREF is non-nil, follow crossref."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1539 (save-excursion
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1540 (let* ((end (if follow-crossref (bibtex-end-of-entry) t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1541 (beg (bibtex-beginning-of-entry)) ; move point
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1542 (bounds (bibtex-search-forward-field field end)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1543 (cond (bounds (bibtex-text-in-field-bounds bounds t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1544 ((and follow-crossref
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1545 (progn (goto-char beg)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1546 (setq bounds (bibtex-search-forward-field
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1547 "\\(OPT\\)?crossref" end))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1548 (let ((crossref-field (bibtex-text-in-field-bounds bounds t)))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1549 (if (bibtex-search-crossref crossref-field)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1550 ;; Do not pass FOLLOW-CROSSREF because we want
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1551 ;; to follow crossrefs only one level of recursion.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1552 (bibtex-text-in-field field))))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1553
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1554 (defun bibtex-parse-string-prefix ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1555 "Parse the prefix part of a BibTeX string entry, including reference key.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1556 If the string prefix is found, return a triple consisting of the position of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1557 the very first character of the match, the actual starting position of the
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1558 reference key and the end position of the match.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1559 If `bibtex-string-empty-key' is non-nil accept empty string key."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1560 (let ((case-fold-search t))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1561 (if (looking-at bibtex-string-type)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1562 (let ((start (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1563 (goto-char (match-end 0))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1564 (cond ((looking-at bibtex-reference-key)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1565 (goto-char (match-end 0))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1566 (list start
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1567 (match-beginning 0)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1568 (match-end 0)))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1569 ((and bibtex-string-empty-key
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1570 (looking-at "="))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1571 (skip-chars-backward " \t\n")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1572 (list start (point) (point))))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1573
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1574 (defun bibtex-parse-string-postfix ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1575 "Parse the postfix part of a BibTeX string entry, including the text.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1576 If the string postfix is found, return a triple consisting of the position of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1577 the actual starting and ending position of the text and the very last
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1578 character of the string entry. Move point past BibTeX string entry."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1579 (let* ((case-fold-search t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1580 (bounds (bibtex-parse-field-text)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1581 (when bounds
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1582 (goto-char (nth 1 bounds))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1583 (when (looking-at "[ \t\n]*[})]")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1584 (goto-char (match-end 0))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1585 (list (car bounds)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1586 (nth 1 bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1587 (match-end 0))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1588
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1589 (defun bibtex-parse-string (&optional empty-key)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1590 "Parse a BibTeX string entry beginning at the position of point.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1591 If a syntactically correct entry is found, return a cons pair containing
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1592 the boundaries of the reference key and text parts of the entry.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1593 If EMPTY-KEY is non-nil, key may be empty. Do not move point."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1594 (let ((bibtex-string-empty-key empty-key))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1595 (bibtex-parse-association 'bibtex-parse-string-prefix
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1596 'bibtex-parse-string-postfix)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1597
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1598 (defun bibtex-search-forward-string (&optional empty-key)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1599 "Search forward to find a BibTeX string entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1600 If a syntactically correct entry is found, a pair containing the boundaries of
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1601 the reference key and text parts of the string is returned.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1602 If EMPTY-KEY is non-nil, key may be empty. Do not move point."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1603 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1604 (save-match-data
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1605 (let ((case-fold-search t) bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1606 (while (and (not bounds)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1607 (search-forward-regexp bibtex-string-type nil t))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1608 (save-excursion (goto-char (match-beginning 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1609 (setq bounds (bibtex-parse-string empty-key))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1610 bounds))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1611
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1612 (defun bibtex-reference-key-in-string (bounds)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1613 "Return the key part of a BibTeX string defined via BOUNDS."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1614 (buffer-substring-no-properties (nth 1 (car bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1615 (nth 2 (car bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1616
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1617 (defun bibtex-text-in-string (bounds &optional content)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1618 "Get text in BibTeX string field defined via BOUNDS.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1619 If optional arg CONTENT is non-nil extract content
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1620 by removing field delimiters and concatenating the resulting string.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1621 If `bibtex-expand-strings' is non-nil, also expand BibTeX strings."
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1622 (bibtex-text-in-field-bounds bounds content))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1623
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1624 (defsubst bibtex-start-of-text-in-string (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1625 (nth 0 (cdr bounds)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1626 (defsubst bibtex-end-of-text-in-string (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1627 (nth 1 (cdr bounds)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1628 (defsubst bibtex-end-of-string (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1629 (nth 2 (cdr bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1630
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1631 (defsubst bibtex-type-in-head ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1632 "Extract BibTeX type in head."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1633 ;; ignore @
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1634 (buffer-substring-no-properties (1+ (match-beginning bibtex-type-in-head))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1635 (match-end bibtex-type-in-head)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1636
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1637 (defsubst bibtex-key-in-head (&optional empty)
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1638 "Extract BibTeX key in head. Return optional arg EMPTY if key is empty."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1639 (or (match-string-no-properties bibtex-key-in-head)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1640 empty))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1641
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1642 (defun bibtex-parse-preamble ()
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1643 "Parse BibTeX preamble.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1644 Point must be at beginning of preamble. Do not move point."
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1645 (let ((case-fold-search t))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1646 (when (looking-at bibtex-preamble-prefix)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1647 (let ((start (match-beginning 0)) (pref-start (match-beginning 1))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1648 (bounds (save-excursion (goto-char (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1649 (bibtex-parse-string-postfix))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1650 (if bounds (cons (list start pref-start) bounds))))))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1651
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
1652 ;; Helper Functions
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1653
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1654 (defsubst bibtex-string= (str1 str2)
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1655 "Return t if STR1 and STR2 are equal, ignoring case."
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1656 (eq t (compare-strings str1 0 nil str2 0 nil t)))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1657
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1658 (defun bibtex-delete-whitespace ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1659 "Delete all whitespace starting at point."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1660 (if (looking-at "[ \t\n]+")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1661 (delete-region (point) (match-end 0))))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1662
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1663 (defun bibtex-current-line ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1664 "Compute line number of point regardless whether the buffer is narrowed."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1665 (+ (count-lines 1 (point))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1666 (if (bolp) 1 0)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1667
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1668 (defun bibtex-valid-entry (&optional empty-key)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1669 "Parse a valid BibTeX entry (maybe without key if EMPTY-KEY is t).
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1670 A valid entry is a syntactical correct one with type contained in
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1671 `bibtex-entry-field-alist'. Ignore @String and @Preamble entries.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1672 Return a cons pair with buffer positions of beginning and end of entry
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1673 if a valid entry is found, nil otherwise. Do not move point.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1674 After a call to this function `match-data' corresponds to the header
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1675 of the entry, see regexp `bibtex-entry-head'."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1676 (let ((case-fold-search t) end)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1677 (if (looking-at (if empty-key bibtex-entry-maybe-empty-head
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1678 bibtex-entry-head))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1679 (save-excursion
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1680 (save-match-data
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1681 (goto-char (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1682 (let ((entry-closer
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1683 (if (save-excursion
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1684 (goto-char (match-end bibtex-type-in-head))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1685 (looking-at "[ \t]*("))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1686 ",?[ \t\n]*)" ; entry opened with `('
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1687 ",?[ \t\n]*}")) ; entry opened with `{'
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1688 bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1689 (skip-chars-forward " \t\n")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1690 ;; loop over all BibTeX fields
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1691 (while (setq bounds (bibtex-parse-field))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1692 (goto-char (bibtex-end-of-field bounds)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1693 ;; This matches the infix* part.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1694 (if (looking-at entry-closer) (setq end (match-end 0)))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1695 (if end (cons (match-beginning 0) end))))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1696
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1697 (defun bibtex-skip-to-valid-entry (&optional backward)
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1698 "Move point to beginning of the next valid BibTeX entry.
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1699 Do not move if we are already at beginning of a valid BibTeX entry.
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1700 With optional argument BACKWARD non-nil, move backward to
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
1701 beginning of previous valid one. A valid entry is a syntactical correct one
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1702 with type contained in `bibtex-entry-field-alist' or, if
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1703 `bibtex-sort-ignore-string-entries' is nil, a syntactical correct string
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1704 entry. Return buffer position of beginning and end of entry if a valid
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1705 entry is found, nil otherwise."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1706 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1707 (let ((case-fold-search t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1708 found bounds)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1709 (beginning-of-line)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1710 ;; Loop till we look at a valid entry.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1711 (while (not (or found (if backward (bobp) (eobp))))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1712 (cond ((setq found (or (bibtex-valid-entry)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1713 (and (not bibtex-sort-ignore-string-entries)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1714 (setq bounds (bibtex-parse-string))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1715 (cons (bibtex-start-of-field bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1716 (bibtex-end-of-string bounds))))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1717 (backward (re-search-backward "^[ \t]*@" nil 'move))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1718 (t (if (re-search-forward "\n\\([ \t]*@\\)" nil 'move)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1719 (goto-char (match-beginning 1))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1720 found))
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
1721
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1722 (defun bibtex-map-entries (fun)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1723 "Call FUN for each BibTeX entry in buffer (possibly narrowed).
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1724 FUN is called with three arguments, the key of the entry and the buffer
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1725 positions of beginning and end of entry. Also, point is at beginning of
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1726 entry and `match-data' corresponds to the header of the entry,
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1727 see regexp `bibtex-entry-head'. If `bibtex-sort-ignore-string-entries'
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1728 is non-nil, FUN is not called for @String entries."
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1729 (let ((case-fold-search t)
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1730 (end-marker (make-marker))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1731 found)
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1732 ;; Use marker to keep track of the buffer position of the end of
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1733 ;; a BibTeX entry as this position may change during reformatting.
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1734 (set-marker-insertion-type end-marker t)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1735 (save-excursion
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1736 (goto-char (point-min))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1737 (while (setq found (bibtex-skip-to-valid-entry))
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1738 (set-marker end-marker (cdr found))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1739 (looking-at bibtex-any-entry-maybe-empty-head)
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1740 (funcall fun (bibtex-key-in-head "") (car found) end-marker)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1741 (goto-char end-marker)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1742
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1743 (defun bibtex-progress-message (&optional flag interval)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1744 "Echo a message about progress of current buffer.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1745 If FLAG is a string, the message is initialized (in this case a
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1746 value for INTERVAL may be given as well (if not this is set to 5)).
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1747 If FLAG is `done', the message is deinitialized.
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1748 If FLAG is nil, a message is echoed if point was incremented at least
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
1749 `bibtex-progress-interval' percent since last message was echoed."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1750 (cond ((stringp flag)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1751 (setq bibtex-progress-lastmes flag
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1752 bibtex-progress-interval (or interval 5)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1753 bibtex-progress-lastperc 0))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1754 ((eq flag 'done)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1755 (message "%s (done)" bibtex-progress-lastmes)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1756 (setq bibtex-progress-lastmes nil))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1757 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1758 (let* ((size (- (point-max) (point-min)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1759 (perc (if (= size 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1760 100
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1761 (/ (* 100 (- (point) (point-min))) size))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1762 (when (>= perc (+ bibtex-progress-lastperc
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1763 bibtex-progress-interval))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1764 (setq bibtex-progress-lastperc perc)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1765 (message "%s (%d%%)" bibtex-progress-lastmes perc))))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1766
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1767 (defun bibtex-field-left-delimiter ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1768 "Return a string dependent on `bibtex-field-delimiters'."
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1769 (if (eq bibtex-field-delimiters 'braces)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1770 "{"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1771 "\""))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1772
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1773 (defun bibtex-field-right-delimiter ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1774 "Return a string dependent on `bibtex-field-delimiters'."
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1775 (if (eq bibtex-field-delimiters 'braces)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1776 "}"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1777 "\""))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1778
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1779 (defun bibtex-entry-left-delimiter ()
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1780 "Return a string dependent on `bibtex-entry-delimiters'."
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1781 (if (eq bibtex-entry-delimiters 'braces)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1782 "{"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1783 "("))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1784
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1785 (defun bibtex-entry-right-delimiter ()
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
1786 "Return a string dependent on `bibtex-entry-delimiters'."
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1787 (if (eq bibtex-entry-delimiters 'braces)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1788 "}"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1789 ")"))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1790
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1791 (defun bibtex-flash-head (prompt)
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1792 "Flash at BibTeX entry head before point, if it exists."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1793 (let ((case-fold-search t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1794 (pnt (point)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1795 (save-excursion
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1796 (bibtex-beginning-of-entry)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1797 (when (and (looking-at bibtex-any-entry-maybe-empty-head)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1798 (< (point) pnt))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1799 (goto-char (match-beginning bibtex-type-in-head))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1800 (if (and (< 0 blink-matching-delay)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1801 (pos-visible-in-window-p (point)))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1802 (sit-for blink-matching-delay)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1803 (message "%s%s" prompt (buffer-substring-no-properties
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1804 (point) (match-end bibtex-key-in-head))))))))
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1805
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1806 (defun bibtex-make-optional-field (field)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1807 "Make an optional field named FIELD in current BibTeX entry."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1808 (if (consp field)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1809 (bibtex-make-field (cons (concat "OPT" (car field)) (cdr field)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1810 (bibtex-make-field (concat "OPT" field))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1811
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1812 (defun bibtex-move-outside-of-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1813 "Make sure point is outside of a BibTeX entry."
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
1814 (let ((orig-point (point)))
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
1815 (bibtex-end-of-entry)
52891
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1816 (when (< (point) orig-point)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1817 ;; We moved backward, so we weren't inside an entry to begin with.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1818 ;; Leave point at the beginning of a line, and preferably
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1819 ;; at the beginning of a paragraph.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1820 (goto-char orig-point)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1821 (beginning-of-line 1)
52891
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1822 (unless (= ?\n (char-before (1- (point))))
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1823 (re-search-forward "^[ \t]*[@\n]" nil 'move)
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1824 (backward-char 1)))
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
1825 (skip-chars-forward " \t\n")))
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1826
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1827 (defun bibtex-beginning-of-first-entry ()
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1828 "Go to beginning of line of first BibTeX entry in buffer.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1829 If `bibtex-sort-ignore-string-entries' is non-nil, @String entries
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1830 are ignored. Return point"
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1831 (goto-char (point-min))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
1832 (bibtex-skip-to-valid-entry)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1833 (point))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1834
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1835 (defun bibtex-enclosing-field (&optional comma noerr)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
1836 "Search for BibTeX field enclosing point.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1837 For `bibtex-mode''s internal algorithms, a field begins at the comma
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1838 following the preceding field. Usually, this is not what the user expects.
106454
d218ddb3768e (bibtex-enclosing-field): Exclude entry delimiter if it is at the end
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106426
diff changeset
1839 Thus if COMMA is non-nil, the \"current field\" includes the terminating comma
d218ddb3768e (bibtex-enclosing-field): Exclude entry delimiter if it is at the end
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106426
diff changeset
1840 as well as the entry delimiter if it appears on the same line.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1841 Unless NOERR is non-nil, signal an error if no enclosing field is found.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
1842 On success return bounds, nil otherwise. Do not move point."
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1843 (save-excursion
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1844 (when comma
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1845 (end-of-line)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1846 (skip-chars-backward " \t")
106454
d218ddb3768e (bibtex-enclosing-field): Exclude entry delimiter if it is at the end
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106426
diff changeset
1847 ;; Ignore entry delimiter and comma at end of line.
d218ddb3768e (bibtex-enclosing-field): Exclude entry delimiter if it is at the end
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106426
diff changeset
1848 (if (memq (preceding-char) '(?} ?\))) (forward-char -1))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1849 (if (= (preceding-char) ?,) (forward-char -1)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1850
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1851 (let ((bounds (bibtex-search-backward-field bibtex-field-name t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1852 (cond ((and bounds
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1853 (<= (bibtex-start-of-field bounds) (point))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1854 (>= (bibtex-end-of-field bounds) (point)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1855 bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1856 ((not noerr)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1857 (error "Can't find enclosing BibTeX field"))))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1858
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1859 (defun bibtex-beginning-first-field (&optional beg)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1860 "Move point to beginning of first field.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1861 Optional arg BEG is beginning of entry."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1862 (if beg (goto-char beg) (bibtex-beginning-of-entry))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1863 (looking-at bibtex-any-entry-maybe-empty-head)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1864 (goto-char (match-end 0)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1865
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1866 (defun bibtex-insert-kill (n &optional comma)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1867 "Reinsert the Nth stretch of killed BibTeX text (field or entry).
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1868 Optional arg COMMA is as in `bibtex-enclosing-field'."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1869 (unless bibtex-last-kill-command (error "BibTeX kill ring is empty"))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1870 (let ((fun (lambda (kryp kr) ; adapted from `current-kill'
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1871 (car (set kryp (nthcdr (mod (- n (length (eval kryp)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1872 (length kr)) kr))))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1873 (if (eq bibtex-last-kill-command 'field)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1874 (progn
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1875 ;; insert past the current field
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1876 (goto-char (bibtex-end-of-field (bibtex-enclosing-field comma)))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1877 (push-mark)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1878 (bibtex-make-field (funcall fun 'bibtex-field-kill-ring-yank-pointer
77206
389303f02afc (bibtex-insert-kill): Pass non-nil NODELIM arg to bibtex-make-field.
Glenn Morris <rgm@gnu.org>
parents: 75356
diff changeset
1879 bibtex-field-kill-ring) t nil t))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1880 ;; insert past the current entry
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1881 (bibtex-skip-to-valid-entry)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
1882 (push-mark)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
1883 (insert (funcall fun 'bibtex-entry-kill-ring-yank-pointer
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1884 bibtex-entry-kill-ring))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1885 (unless (functionp bibtex-reference-keys)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1886 ;; update `bibtex-reference-keys'
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1887 (save-excursion
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1888 (goto-char (mark t))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1889 (looking-at bibtex-any-entry-maybe-empty-head)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1890 (let ((key (bibtex-key-in-head)))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
1891 (if key (push (cons key t) bibtex-reference-keys))))))))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1892
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1893 (defun bibtex-format-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1894 "Helper function for `bibtex-clean-entry'.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1895 Formats current entry according to variable `bibtex-entry-format'."
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1896 ;; initialize `bibtex-field-braces-opt' if necessary
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1897 (if (and bibtex-field-braces-alist (not bibtex-field-braces-opt))
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1898 (setq bibtex-field-braces-opt
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1899 (bibtex-field-re-init bibtex-field-braces-alist 'braces)))
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1900 ;; initialize `bibtex-field-strings-opt' if necessary
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1901 (if (and bibtex-field-strings-alist (not bibtex-field-strings-opt))
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1902 (setq bibtex-field-strings-opt
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1903 (bibtex-field-re-init bibtex-field-strings-alist 'strings)))
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
1904
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1905 (let ((case-fold-search t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1906 (format (if (eq bibtex-entry-format t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1907 '(realign opts-or-alts required-fields numerical-fields
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1908 page-dashes whitespace inherit-booktitle
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1909 last-comma delimiters unify-case braces
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1910 strings)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1911 bibtex-entry-format))
101233
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
1912 (left-delim-re (regexp-quote (bibtex-field-left-delimiter)))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1913 bounds crossref-key req-field-list default-field-list field-list
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1914 alt-fields error-field-name)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1915 (unwind-protect
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1916 ;; formatting (undone if error occurs)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1917 (atomic-change-group
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1918 (save-excursion
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1919 (save-restriction
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1920 (bibtex-narrow-to-entry)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1921
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1922 ;; There are more elegant high-level functions for several tasks
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1923 ;; done by `bibtex-format-entry'. However, they contain some
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1924 ;; redundancy compared with what we need to do anyway.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1925 ;; So for speed-up we avoid using them.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1926 ;; (`bibtex-format-entry' is called often by `bibtex-reformat'.)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1927
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1928 ;; identify entry type
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1929 (goto-char (point-min))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1930 (or (re-search-forward bibtex-entry-type nil t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1931 (error "Not inside a BibTeX entry"))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1932 (let* ((beg-type (1+ (match-beginning 0)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1933 (end-type (match-end 0))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1934 (entry-list (assoc-string (buffer-substring-no-properties
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1935 beg-type end-type)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1936 bibtex-entry-field-alist t)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1937
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
1938 ;; unify case of entry type
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1939 (when (memq 'unify-case format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1940 (delete-region beg-type end-type)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1941 (insert (car entry-list)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1942
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1943 ;; update left entry delimiter
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1944 (when (memq 'delimiters format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1945 (goto-char end-type)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1946 (skip-chars-forward " \t\n")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1947 (delete-char 1)
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1948 (insert (bibtex-entry-left-delimiter)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1949
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1950 ;; Do we have a crossref key?
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1951 (goto-char (point-min))
102868
cf16d0f54438 (bibtex-format-entry, bibtex-search-crossref): Allow OPT prefix for
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102133
diff changeset
1952 (if (setq bounds (bibtex-search-forward-field
cf16d0f54438 (bibtex-format-entry, bibtex-search-crossref): Allow OPT prefix for
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102133
diff changeset
1953 "\\(OPT\\)?crossref"))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1954 (let ((text (bibtex-text-in-field-bounds bounds t)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1955 (unless (equal "" text)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1956 (setq crossref-key text))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1957
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1958 ;; list of required fields appropriate for an entry with
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1959 ;; or without crossref key.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1960 (setq req-field-list (if (and crossref-key (nth 2 entry-list))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1961 (car (nth 2 entry-list))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1962 (car (nth 1 entry-list)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1963 ;; default list of fields that may appear in this entry
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1964 default-field-list (append (nth 0 (nth 1 entry-list))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1965 (nth 1 (nth 1 entry-list))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1966 bibtex-user-optional-fields)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1967
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1968 ;; process all fields
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1969 (bibtex-beginning-first-field (point-min))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1970 (while (setq bounds (bibtex-parse-field))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1971 (let* ((beg-field (copy-marker (bibtex-start-of-field bounds)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1972 (end-field (copy-marker (bibtex-end-of-field bounds) t))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1973 (beg-name (copy-marker (bibtex-start-of-name-in-field bounds)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1974 (end-name (copy-marker (bibtex-end-of-name-in-field bounds)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1975 (beg-text (copy-marker (bibtex-start-of-text-in-field bounds)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1976 (end-text (copy-marker (bibtex-end-of-text-in-field bounds) t))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1977 (opt-alt (string-match "OPT\\|ALT"
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1978 (buffer-substring-no-properties
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1979 beg-name (+ beg-name 3))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1980 (field-name (buffer-substring-no-properties
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1981 (if opt-alt (+ beg-name 3) beg-name) end-name))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1982 (empty-field (equal "" (bibtex-text-in-field-bounds bounds t)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1983 deleted)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1984
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1985 ;; keep track of alternatives
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1986 (if (nth 3 (assoc-string field-name req-field-list t))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1987 (push field-name alt-fields))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1988
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1989 (if (memq 'opts-or-alts format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1990 ;; delete empty optional and alternative fields
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1991 ;; (but keep empty required fields)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1992 (cond ((and empty-field
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1993 (or opt-alt
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1994 (let ((field (assoc-string
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1995 field-name req-field-list t)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1996 (or (not field) ; OPT field
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1997 (nth 3 field))))) ; ALT field
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1998 (delete-region beg-field end-field)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
1999 (setq deleted t))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2000 ;; otherwise nonempty field: delete "OPT" or "ALT"
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2001 (opt-alt
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2002 (goto-char beg-name)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2003 (delete-char 3))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2004
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2005 (unless deleted
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2006 (push field-name field-list)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2007
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2008 ;; Remove whitespace at beginning and end of field.
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2009 ;; We do not look at individual parts of the field
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2010 ;; as {foo } # bar # { baz} is a fine field.
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2011 (when (memq 'whitespace format)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2012 (goto-char beg-text)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2013 (if (looking-at "\\([{\"]\\)[ \t\n]+")
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2014 (replace-match "\\1"))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2015 (goto-char end-text)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2016 (if (looking-back "[ \t\n]+\\([}\"]\\)" beg-text t)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2017 (replace-match "\\1")))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2018
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2019 ;; remove delimiters from purely numerical fields
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2020 (when (and (memq 'numerical-fields format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2021 (progn (goto-char beg-text)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2022 (looking-at "\\(\"[0-9]+\"\\)\\|\\({[0-9]+}\\)")))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2023 (goto-char end-text)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2024 (delete-char -1)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2025 (goto-char beg-text)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2026 (delete-char 1))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2027
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2028 ;; update delimiters
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2029 (when (memq 'delimiters format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2030 (goto-char beg-text)
101233
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2031 ;; simplified from `bibtex-parse-field-text', as we
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2032 ;; already checked that the field format is correct
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2033 (while (< (point) end-text)
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2034 (if (looking-at bibtex-field-const)
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2035 (goto-char (match-end 0))
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2036 (let ((boundaries (bibtex-parse-field-string)))
101248
372dac1d4b95 (bibtex-format-entry): Simplify previous change.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101236
diff changeset
2037 (if (looking-at left-delim-re)
372dac1d4b95 (bibtex-format-entry): Simplify previous change.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101236
diff changeset
2038 (goto-char (cdr boundaries))
101233
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2039 (delete-char 1)
101248
372dac1d4b95 (bibtex-format-entry): Simplify previous change.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101236
diff changeset
2040 (insert (bibtex-field-left-delimiter))
372dac1d4b95 (bibtex-format-entry): Simplify previous change.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101236
diff changeset
2041 (goto-char (1- (cdr boundaries)))
101233
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2042 (delete-char 1)
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2043 (insert (bibtex-field-right-delimiter)))))
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2044 (if (looking-at "[ \t\n]*#[ \t\n]*")
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2045 (goto-char (match-end 0)))))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2046
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2047 ;; update page dashes
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2048 (if (and (memq 'page-dashes format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2049 (bibtex-string= field-name "pages")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2050 (progn (goto-char beg-text)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2051 (looking-at
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2052 "\\([\"{][0-9]+\\)[ \t\n]*--?[ \t\n]*\\([0-9]+[\"}]\\)")))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2053 (replace-match "\\1-\\2"))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2054
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2055 ;; enclose field text by braces according to
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2056 ;; `bibtex-field-braces-alist'.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2057 (let (case-fold-search temp) ; Case-sensitive search
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2058 (when (and (memq 'braces format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2059 (setq temp (cdr (assoc-string field-name
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2060 bibtex-field-braces-opt t))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2061 (goto-char beg-text)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2062 (while (re-search-forward temp end-text t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2063 (let ((beg (match-beginning 0))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2064 (bounds (bibtex-find-text-internal nil t)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2065 (unless (or (nth 4 bounds) ; string constant
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2066 ;; match already surrounded by braces
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2067 ;; (braces are inside field delimiters)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2068 (and (< (point) (1- (nth 2 bounds)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2069 (< (1+ (nth 1 bounds)) beg)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2070 (looking-at "}")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2071 (save-excursion (goto-char (1- beg))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2072 (looking-at "{"))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2073 (insert "}")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2074 (goto-char beg)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2075 (insert "{")))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2076
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2077 ;; replace field text by BibTeX string constants
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2078 ;; according to `bibtex-field-strings-alist'.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2079 (when (and (memq 'strings format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2080 (setq temp (cdr (assoc-string field-name
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2081 bibtex-field-strings-opt t))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2082 (goto-char beg-text)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2083 (dolist (re temp)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2084 (while (re-search-forward (car re) end-text t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2085 (let ((bounds (save-match-data
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2086 (bibtex-find-text-internal nil t))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2087 (unless (nth 4 bounds)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2088 ;; if match not at right subfield boundary...
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2089 (if (< (match-end 0) (1- (nth 2 bounds)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2090 (insert " # " (bibtex-field-left-delimiter))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2091 (delete-char 1))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2092 (replace-match (cdr re))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2093 (goto-char (match-beginning 0))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2094 ;; if match not at left subfield boundary...
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2095 (if (< (1+ (nth 1 bounds)) (match-beginning 0))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2096 (insert (bibtex-field-right-delimiter) " # ")
108765
d835100c3e8b Replace Lisp calls to delete-backward-char by delete-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106837
diff changeset
2097 (delete-char -1))))))))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2098
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2099 ;; use book title of crossref'd entry
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2100 (if (and (memq 'inherit-booktitle format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2101 empty-field
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2102 (bibtex-string= field-name "booktitle")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2103 crossref-key)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2104 (let ((title (save-excursion
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2105 (save-restriction
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2106 (widen)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2107 (if (bibtex-search-entry crossref-key t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2108 (bibtex-text-in-field "title"))))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2109 (when title
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2110 (setq empty-field nil)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2111 (goto-char (1+ beg-text))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2112 (insert title))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2113
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2114 ;; if empty field is a required field, complain
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2115 (when (and empty-field
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2116 (memq 'required-fields format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2117 (assoc-string field-name req-field-list t))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2118 (setq error-field-name field-name)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2119 (error "Mandatory field `%s' is empty" field-name))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2120
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2121 ;; unify case of field name
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2122 (if (memq 'unify-case format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2123 (let ((fname (car (assoc-string field-name
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2124 default-field-list t))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2125 (if fname
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2126 (progn
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2127 (delete-region beg-name end-name)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2128 (goto-char beg-name)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2129 (insert fname))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2130 ;; there are no rules we could follow
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2131 (downcase-region beg-name end-name))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2132
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2133 ;; update point
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2134 (goto-char end-field))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2135
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2136 ;; check whether all required fields are present
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2137 (if (memq 'required-fields format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2138 (let ((found 0) alt-list)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2139 (dolist (fname req-field-list)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2140 (cond ((nth 3 fname) ; t if field has alternative flag
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2141 (push (car fname) alt-list)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2142 (if (member-ignore-case (car fname) field-list)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2143 (setq found (1+ found))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2144 ((not (member-ignore-case (car fname) field-list))
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2145 ;; If we use the crossref field, a required field
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2146 ;; can have the OPT prefix. So if it was empty,
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2147 ;; we have deleted by now. Nonetheless we can
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2148 ;; move point on this empty field.
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2149 (setq error-field-name (car fname))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2150 (error "Mandatory field `%s' is missing" (car fname)))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2151 (if alt-list
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2152 (cond ((= found 0)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2153 (if alt-fields
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2154 (setq error-field-name (car (last alt-fields))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2155 (error "Alternative mandatory field `%s' is missing"
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2156 alt-list))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2157 ((> found 1)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2158 (if alt-fields
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2159 (setq error-field-name (car (last alt-fields))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2160 (error "Alternative fields `%s' are defined %s times"
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2161 alt-list found))))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2162
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2163 ;; update comma after last field
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2164 (if (memq 'last-comma format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2165 (cond ((and bibtex-comma-after-last-field
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2166 (not (looking-at ",")))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2167 (insert ","))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2168 ((and (not bibtex-comma-after-last-field)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2169 (looking-at ","))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2170 (delete-char 1))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2171
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2172 ;; update right entry delimiter
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2173 (if (looking-at ",")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2174 (forward-char))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2175 (when (memq 'delimiters format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2176 (skip-chars-forward " \t\n")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2177 (delete-char 1)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2178 (insert (bibtex-entry-right-delimiter)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2179
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2180 ;; realign and fill entry
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2181 (if (memq 'realign format)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2182 (bibtex-fill-entry)))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2183
106837
855f55740303 Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents: 106815
diff changeset
2184 ;; Unwindform: move point to location where error occurred if possible
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2185 (if error-field-name
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2186 (let (bounds)
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2187 (when (save-excursion
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2188 (bibtex-beginning-of-entry)
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2189 (setq bounds
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2190 (bibtex-search-forward-field
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2191 ;; If we use the crossref field, a required field
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2192 ;; can have the OPT prefix
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2193 (concat "\\(OPT\\|ALT\\)?" error-field-name) t)))
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2194 (goto-char (bibtex-start-of-text-in-field bounds))
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
2195 (bibtex-find-text)))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2196
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2197 (defun bibtex-field-re-init (regexp-alist type)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2198 "Calculate optimized value for bibtex-regexp-TYPE-opt.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2199 This value is based on bibtex-regexp-TYPE-alist. TYPE is 'braces or 'strings.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2200 Return optimized value to be used by `bibtex-format-entry'."
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2201 (setq regexp-alist
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2202 (mapcar (lambda (e)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2203 (list (car e)
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2204 (replace-regexp-in-string " +" "[ \t\n]+" (nth 1 e))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2205 (nth 2 e))) ; nil for 'braces'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2206 regexp-alist))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2207 (let (opt-list)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2208 ;; Loop over field names
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2209 (dolist (field (delete-dups (apply 'append (mapcar 'car regexp-alist))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2210 (let (rules)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2211 ;; Collect all matches we have for this field name
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2212 (dolist (e regexp-alist)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2213 (if (assoc-string field (car e) t)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2214 (push (cons (nth 1 e) (nth 2 e)) rules)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2215 (if (eq type 'braces)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2216 ;; concatenate all regexps to a single regexp
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2217 (setq rules (concat "\\(?:" (mapconcat 'car rules "\\|") "\\)")))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2218 ;; create list of replacement rules.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2219 (push (cons field rules) opt-list)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2220 opt-list))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2221
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2222
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
2223 (defun bibtex-autokey-abbrev (string len)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2224 "Return an abbreviation of STRING with at least LEN characters.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2225 If LEN is positive the abbreviation is terminated only after a consonant
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2226 or at the word end. If LEN is negative the abbreviation is strictly
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2227 enforced using abs (LEN) characters. If LEN is not a number, STRING
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2228 is returned unchanged."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2229 (cond ((or (not (numberp len))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2230 (<= (length string) (abs len)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2231 string)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2232 ((equal len 0)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2233 "")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2234 ((< len 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2235 (substring string 0 (abs len)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2236 (t (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2237 (abort-char (string-match "[^aeiou]" string (1- len))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2238 (if abort-char
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2239 (substring string 0 (1+ abort-char))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2240 string)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2241
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2242 (defun bibtex-autokey-get-field (field &optional change-list)
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2243 "Get content of BibTeX field FIELD. Return empty string if not found.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2244 Optional arg CHANGE-LIST is a list of substitution patterns that is
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2245 applied to the content of FIELD. It is an alist with pairs
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2246 \(OLD-REGEXP . NEW-STRING\)."
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2247 (let* ((bibtex-expand-strings bibtex-autokey-expand-strings)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2248 (content (bibtex-text-in-field field bibtex-autokey-use-crossref))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2249 case-fold-search)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2250 (unless content (setq content ""))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2251 (dolist (pattern change-list content)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2252 (setq content (replace-regexp-in-string (car pattern)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2253 (cdr pattern)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2254 content t)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2255
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2256 (defun bibtex-autokey-get-names ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2257 "Get contents of the name field of the current entry.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2258 Do some modifications based on `bibtex-autokey-name-change-strings'.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2259 Return the names as a concatenated string obeying `bibtex-autokey-names'
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2260 and `bibtex-autokey-names-stretch'."
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2261 (let ((names (bibtex-autokey-get-field "author\\|editor"
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2262 bibtex-autokey-name-change-strings)))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2263 ;; Some entries do not have a name field.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2264 (if (string= "" names)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2265 names
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2266 (let* ((case-fold-search t)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2267 (name-list (mapcar 'bibtex-autokey-demangle-name
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2268 (split-string names "[ \t\n]+and[ \t\n]+")))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2269 additional-names)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2270 (unless (or (not (numberp bibtex-autokey-names))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2271 (<= (length name-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2272 (+ bibtex-autokey-names
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2273 bibtex-autokey-names-stretch)))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2274 ;; Take `bibtex-autokey-names' elements from beginning of name-list
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2275 (setq name-list (nreverse (nthcdr (- (length name-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2276 bibtex-autokey-names)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2277 (nreverse name-list)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2278 additional-names bibtex-autokey-additional-names))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2279 (concat (mapconcat 'identity name-list
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2280 bibtex-autokey-name-separator)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2281 additional-names)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2282
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2283 (defun bibtex-autokey-demangle-name (fullname)
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2284 "Get the last part from a well-formed FULLNAME and perform abbreviations."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2285 (let* (case-fold-search
61439
267229876c56 (bibtex-autokey-titleword-ignore, bibtex-reference-key)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61247
diff changeset
2286 (name (cond ((string-match "\\([[:upper:]][^, ]*\\)[^,]*," fullname)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2287 ;; Name is of the form "von Last, First" or
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2288 ;; "von Last, Jr, First"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2289 ;; --> Take the first capital part before the comma
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2290 (match-string 1 fullname))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2291 ((string-match "\\([^, ]*\\)," fullname)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2292 ;; Strange name: we have a comma, but nothing capital
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2293 ;; So we accept even lowercase names
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2294 (match-string 1 fullname))
61439
267229876c56 (bibtex-autokey-titleword-ignore, bibtex-reference-key)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61247
diff changeset
2295 ((string-match "\\(\\<[[:lower:]][^ ]* +\\)+\\([[:upper:]][^ ]*\\)"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2296 fullname)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2297 ;; name is of the form "First von Last", "von Last",
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2298 ;; "First von von Last", or "d'Last"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2299 ;; --> take the first capital part after the "von" parts
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2300 (match-string 2 fullname))
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2301 ((string-match "\\([^ ]+\\) *\\'" fullname)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2302 ;; name is of the form "First Middle Last" or "Last"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2303 ;; --> take the last token
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2304 (match-string 1 fullname))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2305 (t (error "Name `%s' is incorrectly formed" fullname)))))
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
2306 (funcall bibtex-autokey-name-case-convert-function
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2307 (bibtex-autokey-abbrev name bibtex-autokey-name-length))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2308
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2309 (defun bibtex-autokey-get-year ()
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2310 "Return year field contents as a string obeying `bibtex-autokey-year-length'."
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2311 (let ((yearfield (bibtex-autokey-get-field "year")))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2312 (substring yearfield (max 0 (- (length yearfield)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2313 bibtex-autokey-year-length)))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2314
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2315 (defun bibtex-autokey-get-title ()
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2316 "Get title field contents up to a terminator.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2317 Return the result as a string"
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2318 (let ((case-fold-search t)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2319 (titlestring
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2320 (bibtex-autokey-get-field "title"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2321 bibtex-autokey-titleword-change-strings)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2322 ;; ignore everything past a terminator
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2323 (if (string-match bibtex-autokey-title-terminators titlestring)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2324 (setq titlestring (substring titlestring 0 (match-beginning 0))))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2325 ;; gather words from titlestring into a list. Ignore
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2326 ;; specific words and use only a specific amount of words.
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2327 (let ((counter 0)
102133
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
2328 (ignore-re (concat "\\`\\(?:"
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
2329 (mapconcat 'identity
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
2330 bibtex-autokey-titleword-ignore "\\|")
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
2331 "\\)\\'"))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2332 titlewords titlewords-extra word)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2333 (while (and (or (not (numberp bibtex-autokey-titlewords))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2334 (< counter (+ bibtex-autokey-titlewords
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2335 bibtex-autokey-titlewords-stretch)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2336 (string-match "\\b\\w+" titlestring))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2337 (setq word (match-string 0 titlestring)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2338 titlestring (substring titlestring (match-end 0)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2339 ;; Ignore words matched by one of the elements of
102133
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
2340 ;; `bibtex-autokey-titleword-ignore'. Case is significant.
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
2341 (unless (let (case-fold-search)
2eec802705ee (bibtex-autokey-titleword-ignore): Fix regexp. bug#2385.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102038
diff changeset
2342 (string-match ignore-re word))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2343 (setq counter (1+ counter))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2344 (if (or (not (numberp bibtex-autokey-titlewords))
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
2345 (<= counter bibtex-autokey-titlewords))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2346 (push word titlewords)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2347 (push word titlewords-extra))))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2348 ;; Obey `bibtex-autokey-titlewords-stretch':
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2349 ;; If by now we have processed all words in titlestring, we include
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2350 ;; titlewords-extra in titlewords. Otherwise, we ignore titlewords-extra.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2351 (unless (string-match "\\b\\w+" titlestring)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2352 (setq titlewords (append titlewords-extra titlewords)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2353 (mapconcat 'bibtex-autokey-demangle-title (nreverse titlewords)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2354 bibtex-autokey-titleword-separator))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2355
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2356 (defun bibtex-autokey-demangle-title (titleword)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2357 "Do some abbreviations on TITLEWORD.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2358 The rules are defined in `bibtex-autokey-titleword-abbrevs'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2359 and `bibtex-autokey-titleword-length'."
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2360 (let ((case-fold-search t)
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2361 (alist bibtex-autokey-titleword-abbrevs))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2362 (while (and alist
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2363 (not (string-match (concat "\\`\\(?:" (caar alist) "\\)\\'")
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2364 titleword)))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2365 (setq alist (cdr alist)))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2366 (if alist
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
2367 (cdar alist)
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
2368 (funcall bibtex-autokey-titleword-case-convert-function
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2369 (bibtex-autokey-abbrev titleword bibtex-autokey-titleword-length)))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
2370
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
2371 (defun bibtex-generate-autokey ()
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2372 "Generate automatically a key for a BibTeX entry.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2373 Use the author/editor, the year and the title field.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2374 The algorithm works as follows.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2375
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2376 The name part:
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2377 1. Use the author or editor field to generate the name part of the key.
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2378 Expand BibTeX strings if `bibtex-autokey-expand-strings' is non-nil.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2379 2. Change the content of the name field according to
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2380 `bibtex-autokey-name-change-strings' (see there for further detail).
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2381 3. Use the first `bibtex-autokey-names' names in the name field. If there
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2382 are up to `bibtex-autokey-names' + `bibtex-autokey-names-stretch' names,
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2383 use all names.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2384 4. Use only the last names to form the name part. From these last names,
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2385 take at least `bibtex-autokey-name-length' characters (truncate only
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2386 after a consonant or at a word end).
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2387 5. Convert all last names using the function
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
2388 `bibtex-autokey-name-case-convert-function'.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2389 6. Build the name part of the key by concatenating all abbreviated last
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2390 names with the string `bibtex-autokey-name-separator' between any two.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2391 If there are more names in the name field than names used in the name
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2392 part, append the string `bibtex-autokey-additional-names'.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2393
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2394 The year part:
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2395 1. Build the year part of the key by truncating the content of the year
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2396 field to the rightmost `bibtex-autokey-year-length' digits (useful
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2397 values are 2 and 4).
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2398 2. If the year field (or any other field required to generate the key)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2399 is absent, but the entry has a valid crossref field and
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2400 `bibtex-autokey-use-crossref' is non-nil, use the field of the
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2401 crossreferenced entry instead.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2402
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2403 The title part
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2404 1. Change the content of the title field according to
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2405 `bibtex-autokey-titleword-change-strings' (see there for further detail).
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2406 2. Truncate the title before the first match of
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2407 `bibtex-autokey-title-terminators' and delete those words which appear
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2408 in `bibtex-autokey-titleword-ignore'. Build the title part using the
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2409 first `bibtex-autokey-titlewords' words from this truncated title.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2410 If the truncated title ends after up to `bibtex-autokey-titlewords' +
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2411 `bibtex-autokey-titlewords-stretch' words, use all words from the
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2412 truncated title.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2413 3. For every title word that appears in `bibtex-autokey-titleword-abbrevs'
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2414 use the corresponding abbreviation (see documentation of this variable
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2415 for further detail).
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2416 4. From every title word not generated by an abbreviation, take at least
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2417 `bibtex-autokey-titleword-length' characters (truncate only after
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2418 a consonant or at a word end).
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2419 5. Convert all title words using the function
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
2420 `bibtex-autokey-titleword-case-convert-function'.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2421 6. Build the title part by concatenating all abbreviated title words with
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2422 the string `bibtex-autokey-titleword-separator' between any two.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2423
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2424 Concatenate the key:
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2425 1. Concatenate `bibtex-autokey-prefix-string', the name part, the year
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2426 part and the title part. If the name part and the year part are both
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2427 non-empty insert `bibtex-autokey-name-year-separator' between the two.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2428 If the title part and the year (or name) part are non-empty, insert
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2429 `bibtex-autokey-year-title-separator' between the two.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2430 2. If `bibtex-autokey-before-presentation-function' is non-nil, it must be
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2431 a function taking one argument. Call this function with the generated
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2432 key as the argument. Use the return value of this function (a string)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2433 as the key.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2434 3. If `bibtex-autokey-edit-before-use' is non-nil, present the key in the
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2435 minibuffer to the user for editing. Insert the key given by the user."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2436 (let* ((names (bibtex-autokey-get-names))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2437 (year (bibtex-autokey-get-year))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2438 (title (bibtex-autokey-get-title))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2439 (autokey (concat bibtex-autokey-prefix-string
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2440 names
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2441 (unless (or (equal names "")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2442 (equal year ""))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2443 bibtex-autokey-name-year-separator)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2444 year
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2445 (unless (or (and (equal names "")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2446 (equal year ""))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2447 (equal title ""))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2448 bibtex-autokey-year-title-separator)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2449 title)))
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2450 (if bibtex-autokey-before-presentation-function
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2451 (funcall bibtex-autokey-before-presentation-function autokey)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2452 autokey)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2453
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2454
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2455 (defun bibtex-global-key-alist ()
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2456 "Return global key alist based on `bibtex-files'."
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2457 (if bibtex-files
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2458 (apply 'append
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2459 (mapcar (lambda (buf)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2460 (with-current-buffer buf bibtex-reference-keys))
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2461 ;; include current buffer only if it uses `bibtex-mode'
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2462 (bibtex-initialize (eq major-mode 'bibtex-mode))))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2463 (if (eq major-mode 'bibtex-mode)
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2464 bibtex-reference-keys)))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2465
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2466 (defun bibtex-read-key (prompt &optional key global)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2467 "Read BibTeX key from minibuffer using PROMPT and default KEY.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2468 If optional arg GLOBAL is non-nil, completion is based on the keys in
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2469 `bibtex-reference-keys' of `bibtex-files',"
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2470 (let (completion-ignore-case)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2471 (completing-read prompt (if global (bibtex-global-key-alist)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2472 bibtex-reference-keys)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2473 nil nil key 'bibtex-key-history)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2474
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2475 (defun bibtex-read-string-key (&optional key)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2476 "Read BibTeX string key from minibuffer using default KEY."
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2477 (let ((completion-ignore-case t))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2478 (completing-read "String key: " bibtex-strings
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2479 nil nil key 'bibtex-key-history)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2480
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2481 (defun bibtex-parse-keys (&optional abortable verbose)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2482 "Set `bibtex-reference-keys' to the keys used in the whole buffer.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2483 Find both entry keys and crossref entries. If ABORTABLE is non-nil abort
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2484 on user input. If VERBOSE is non-nil give messages about progress.
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2485 Return alist of keys if parsing was completed, `aborted' otherwise.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2486 If `bibtex-parse-keys-fast' is non-nil, use fast but simplified algorithm
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2487 for parsing BibTeX keys. If parsing fails, try to set this variable to nil."
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2488 (if (eq major-mode 'bibtex-mode)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2489 (let (ref-keys crossref-keys)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2490 (save-excursion
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2491 (save-match-data
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2492 (if verbose
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2493 (bibtex-progress-message
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2494 (concat (buffer-name) ": parsing reference keys")))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2495 (catch 'userkey
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2496 (goto-char (point-min))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2497 (if bibtex-parse-keys-fast
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2498 (let ((case-fold-search t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2499 (re (concat bibtex-entry-head "\\|"
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2500 ",[ \t\n]*crossref[ \t\n]*=[ \t\n]*"
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2501 "\\(\"[^\"]*\"\\|{[^}]*}\\)[ \t\n]*[,})]")))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2502 (while (re-search-forward re nil t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2503 (if (and abortable (input-pending-p))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2504 ;; user has aborted by typing a key: return `aborted'
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2505 (throw 'userkey 'aborted))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2506 (cond ((match-end 3)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2507 ;; This is a crossref.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2508 (let ((key (buffer-substring-no-properties
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2509 (1+ (match-beginning 3)) (1- (match-end 3)))))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2510 (unless (assoc key crossref-keys)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2511 (push (list key) crossref-keys))))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2512 ;; only keys of known entries
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2513 ((assoc-string (bibtex-type-in-head)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2514 bibtex-entry-field-alist t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2515 ;; This is an entry.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2516 (let ((key (bibtex-key-in-head)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2517 (unless (assoc key ref-keys)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2518 (push (cons key t) ref-keys)))))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2519
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2520 (let (;; ignore @String entries because they are handled
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2521 ;; separately by `bibtex-parse-strings'
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2522 (bibtex-sort-ignore-string-entries t)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2523 bounds)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2524 (bibtex-map-entries
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2525 (lambda (key beg end)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2526 (if (and abortable
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2527 (input-pending-p))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2528 ;; user has aborted by typing a key: return `aborted'
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2529 (throw 'userkey 'aborted))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2530 (if verbose (bibtex-progress-message))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2531 (unless (assoc key ref-keys)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2532 (push (cons key t) ref-keys))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2533 (if (and (setq bounds (bibtex-search-forward-field "crossref" end))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2534 (setq key (bibtex-text-in-field-bounds bounds t))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2535 (not (assoc key crossref-keys)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2536 (push (list key) crossref-keys))))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2537
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2538 (dolist (key crossref-keys)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2539 (unless (assoc (car key) ref-keys) (push key ref-keys)))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2540 (if verbose
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2541 (bibtex-progress-message 'done))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2542 ;; successful operation --> return `bibtex-reference-keys'
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2543 (setq bibtex-reference-keys ref-keys)))))))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2544
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2545 (defun bibtex-parse-strings (&optional add abortable)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2546 "Set `bibtex-strings' to the string definitions in the whole buffer.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2547 If ADD is non-nil add the new strings to `bibtex-strings' instead of
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2548 simply resetting it. If ADD is an alist of strings, also add ADD to
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2549 `bibtex-strings'. If ABORTABLE is non-nil abort on user input.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2550 Return alist of strings if parsing was completed, `aborted' otherwise."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2551 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2552 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2553 (goto-char (point-min))
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2554 (let ((strings (if (and add (not (functionp bibtex-strings)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2555 bibtex-strings))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2556 bounds key)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2557 (if (listp add)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2558 (dolist (string add)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2559 (unless (assoc-string (car string) strings t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2560 (push string strings))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2561 (catch 'userkey
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2562 (while (setq bounds (bibtex-search-forward-string))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2563 (if (and abortable
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2564 (input-pending-p))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2565 ;; user has aborted by typing a key --> return `aborted'
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2566 (throw 'userkey 'aborted))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2567 (setq key (bibtex-reference-key-in-string bounds))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2568 (unless (assoc-string key strings t)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2569 (push (cons key (bibtex-text-in-string bounds t))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2570 strings))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2571 (goto-char (bibtex-end-of-text-in-string bounds)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2572 ;; successful operation --> return `bibtex-strings'
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2573 (setq bibtex-strings strings))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2574
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2575 (defun bibtex-strings ()
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2576 "Return `bibtex-strings'. Initialize this variable if necessary."
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2577 (if (functionp bibtex-strings)
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2578 (bibtex-parse-strings (bibtex-string-files-init))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2579 bibtex-strings))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2580
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2581 (defun bibtex-string-files-init ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2582 "Return initialization for `bibtex-strings'.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2583 Use `bibtex-predefined-strings' and BibTeX files `bibtex-string-files'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2584 (save-match-data
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2585 (let ((dirlist (split-string (or bibtex-string-file-path default-directory)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2586 ":+"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2587 (case-fold-search)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2588 string-files fullfilename compl bounds found)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2589 ;; collect absolute file names of valid string files
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2590 (dolist (filename bibtex-string-files)
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2591 (unless (string-match "\\.bib\\'" filename)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2592 (setq filename (concat filename ".bib")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2593 ;; test filenames
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2594 (if (file-name-absolute-p filename)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2595 (if (file-readable-p filename)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2596 (push filename string-files)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2597 (error "BibTeX strings file %s not found" filename))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2598 (dolist (dir dirlist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2599 (when (file-readable-p
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2600 (setq fullfilename (expand-file-name filename dir)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2601 (push fullfilename string-files)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2602 (setq found t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2603 (unless found
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2604 (error "File %s not in paths defined via bibtex-string-file-path"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2605 filename))))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2606 ;; parse string files
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2607 (dolist (filename string-files)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2608 (with-temp-buffer
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2609 (insert-file-contents filename)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2610 (goto-char (point-min))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2611 (while (setq bounds (bibtex-search-forward-string))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2612 (push (cons (bibtex-reference-key-in-string bounds)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2613 (bibtex-text-in-string bounds t))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2614 compl)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2615 (goto-char (bibtex-end-of-string bounds)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2616 (append bibtex-predefined-strings (nreverse compl)))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
2617
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2618 (defun bibtex-parse-buffers-stealthily ()
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2619 "Parse buffer in the background during idle time.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2620 Called by `run-with-idle-timer'. Whenever Emacs has been idle
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2621 for `bibtex-parse-keys-timeout' seconds, parse all BibTeX buffers
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2622 which have been modified after last parsing.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2623 Parsing initializes `bibtex-reference-keys' and `bibtex-strings'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2624 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2625 (let ((buffers (buffer-list))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2626 (strings-init (bibtex-string-files-init)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2627 (while (and buffers (not (input-pending-p)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2628 (set-buffer (car buffers))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2629 (if (and (eq major-mode 'bibtex-mode)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2630 (not (eq (buffer-modified-tick)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2631 bibtex-buffer-last-parsed-tick)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2632 (save-restriction
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2633 (widen)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2634 ;; Output no progress messages in `bibtex-parse-keys'
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2635 ;; because when in `y-or-n-p' that can hide the question.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2636 (if (and (listp (bibtex-parse-keys t))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2637 ;; update `bibtex-strings'
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2638 (listp (bibtex-parse-strings strings-init t)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2639
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2640 ;; remember that parsing was successful
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2641 (setq bibtex-buffer-last-parsed-tick (buffer-modified-tick)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2642 (setq buffers (cdr buffers))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2643
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2644 ;;;###autoload
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2645 (defun bibtex-initialize (&optional current force select)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2646 "(Re)Initialize BibTeX buffers.
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2647 Visit the BibTeX files defined by `bibtex-files' and return a list
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2648 of corresponding buffers.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2649 Initialize in these buffers `bibtex-reference-keys' if not yet set.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2650 List of BibTeX buffers includes current buffer if CURRENT is non-nil.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2651 If FORCE is non-nil, (re)initialize `bibtex-reference-keys' even if
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2652 already set. If SELECT is non-nil interactively select a BibTeX buffer.
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2653 When called interactively, FORCE is t, CURRENT is t if current buffer uses
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2654 `bibtex-mode', and SELECT is t if current buffer does not use `bibtex-mode',"
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2655 (interactive (list (eq major-mode 'bibtex-mode) t
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2656 (not (eq major-mode 'bibtex-mode))))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2657 (let ((file-path (split-string (or bibtex-file-path default-directory) ":+"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2658 file-list dir-list buffer-list)
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2659 ;; generate list of BibTeX files
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2660 (dolist (file bibtex-files)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2661 (cond ((eq file 'bibtex-file-path)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2662 (setq dir-list (append dir-list file-path)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2663 ((file-accessible-directory-p file)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2664 (push file dir-list))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2665 ((progn (unless (string-match "\\.bib\\'" file)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2666 (setq file (concat file ".bib")))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2667 (file-name-absolute-p file))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2668 (push file file-list))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2669 (t
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2670 (let (expanded-file-name found)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2671 (dolist (dir file-path)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2672 (when (file-readable-p
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2673 (setq expanded-file-name (expand-file-name file dir)))
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2674 (push expanded-file-name file-list)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2675 (setq found t)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2676 (unless found
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2677 (error "File `%s' not in paths defined via bibtex-file-path"
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2678 file))))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2679 (dolist (file file-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2680 (unless (file-readable-p file)
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2681 (error "BibTeX file `%s' not found" file)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2682 ;; expand dir-list
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2683 (dolist (dir dir-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2684 (setq file-list
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2685 (append file-list (directory-files dir t "\\.bib\\'" t))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2686 (delete-dups file-list)
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2687 ;; visit files in FILE-LIST
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2688 (dolist (file file-list)
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2689 (if (file-readable-p file)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2690 (push (find-file-noselect file) buffer-list)))
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2691 ;; Include current buffer iff we want it.
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2692 ;; Exclude current buffer if it doesn't use `bibtex-mode'.
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2693 ;; Thus calling `bibtex-initialize' gives meaningful results for
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2694 ;; any current buffer.
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2695 (unless (and current (eq major-mode 'bibtex-mode)) (setq current nil))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2696 (cond ((and current (not (memq (current-buffer) buffer-list)))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2697 (push (current-buffer) buffer-list))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2698 ((and (not current) (memq (current-buffer) buffer-list))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2699 (setq buffer-list (delq (current-buffer) buffer-list))))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2700 ;; parse keys
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2701 (dolist (buffer buffer-list)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2702 (with-current-buffer buffer
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
2703 (if (or force (functionp bibtex-reference-keys))
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2704 (bibtex-parse-keys))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2705 (unless (functionp bibtex-strings)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
2706 (bibtex-parse-strings (bibtex-string-files-init)))))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2707 ;; select BibTeX buffer
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2708 (if select
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2709 (if buffer-list
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2710 (switch-to-buffer
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2711 (completing-read "Switch to BibTeX buffer: "
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2712 (mapcar 'buffer-name buffer-list)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2713 nil t
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2714 (if current (buffer-name (current-buffer)))))
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
2715 (message "No BibTeX buffers defined")))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2716 buffer-list))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2717
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2718 (defun bibtex-complete-internal (completions)
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2719 "Complete word fragment before point to longest prefix of COMPLETIONS.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2720 COMPLETIONS is an alist of strings. If point is not after the part
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2721 of a word, all strings are listed. Return completion."
67933
679e4542aaa9 (bibtex-mode): Make completion-ignore-case
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67897
diff changeset
2722 ;; Return value is used by cleanup functions.
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2723 ;; Code inspired by `lisp-complete-symbol'.
106385
cd8b405d57c6 (bibtex-complete-internal): Use completion-in-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105813
diff changeset
2724 (let ((beg (save-excursion
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2725 (re-search-backward "[ \t{\"]")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2726 (forward-char)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2727 (point)))
106385
cd8b405d57c6 (bibtex-complete-internal): Use completion-in-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105813
diff changeset
2728 (end (point)))
cd8b405d57c6 (bibtex-complete-internal): Use completion-in-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105813
diff changeset
2729 (when (completion-in-region beg end completions)
cd8b405d57c6 (bibtex-complete-internal): Use completion-in-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105813
diff changeset
2730 (buffer-substring beg (point)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2731
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2732 (defun bibtex-complete-string-cleanup (str compl)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2733 "Cleanup after inserting string STR.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2734 Remove enclosing field delimiters for STR. Display message with
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2735 expansion of STR using expansion list COMPL."
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2736 ;; point is at position inside field where completion was requested
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2737 (save-excursion
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2738 (let ((abbr (cdr (if (stringp str)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2739 (assoc-string str compl t)))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2740 (if abbr (message "Abbreviation for `%s'" abbr))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2741 (bibtex-remove-delimiters))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2742
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2743 (defun bibtex-complete-crossref-cleanup (key)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2744 "Display summary message on entry KEY after completion of a crossref key.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2745 Use `bibtex-summary-function' to generate summary."
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
2746 (save-excursion
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2747 (if (and (stringp key)
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2748 (bibtex-search-entry key t))
62077
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
2749 (message "Ref: %s" (funcall bibtex-summary-function)))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2750
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2751 (defun bibtex-copy-summary-as-kill (&optional arg)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2752 "Push summery of current BibTeX entry to kill ring.
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2753 Use `bibtex-summary-function' to generate summary.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2754 If prefix ARG is non-nil push BibTeX entry's URL to kill ring
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2755 that is generated by calling `bibtex-url'."
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2756 (interactive "P")
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2757 (if arg (let ((url (bibtex-url nil t)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2758 (if url (kill-new (message "%s" url))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2759 (message "No URL known")))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2760 (save-excursion
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2761 (bibtex-beginning-of-entry)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2762 (if (looking-at bibtex-entry-maybe-empty-head)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2763 (kill-new (message "%s" (funcall bibtex-summary-function)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2764 (error "No entry found")))))
62077
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
2765
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
2766 (defun bibtex-summary ()
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
2767 "Return summary of current BibTeX entry.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2768 Used as default value of `bibtex-summary-function'."
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2769 ;; It would be neat to make this function customizable. How?
65776
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2770 (if (looking-at bibtex-entry-maybe-empty-head)
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
2771 (let* ((bibtex-autokey-name-case-convert-function 'identity)
65776
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2772 (bibtex-autokey-name-length 'infty)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2773 (bibtex-autokey-names 1)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2774 (bibtex-autokey-names-stretch 0)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2775 (bibtex-autokey-name-separator " ")
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2776 (bibtex-autokey-additional-names " etal")
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2777 (names (bibtex-autokey-get-names))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2778 (bibtex-autokey-year-length 4)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2779 (year (bibtex-autokey-get-year))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2780 (bibtex-autokey-titlewords 5)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2781 (bibtex-autokey-titlewords-stretch 2)
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
2782 (bibtex-autokey-titleword-case-convert-function 'identity)
65776
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2783 (bibtex-autokey-titleword-length 5)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2784 (bibtex-autokey-titleword-separator " ")
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2785 (title (bibtex-autokey-get-title))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2786 (journal (bibtex-autokey-get-field
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2787 "journal" bibtex-autokey-transcriptions))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2788 (volume (bibtex-autokey-get-field "volume"))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2789 (pages (bibtex-autokey-get-field "pages" '(("-.*\\'" . "")))))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2790 (mapconcat (lambda (arg)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2791 (if (not (string= "" (cdr arg)))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2792 (concat (car arg) (cdr arg))))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2793 `((" " . ,names) (" " . ,year) (": " . ,title)
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2794 (", " . ,journal) (" " . ,volume) (":" . ,pages))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2795 ""))
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
2796 (error "Entry not found")))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2797
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2798 (defun bibtex-pop (arg direction)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2799 "Fill current field from the ARGth same field's text in DIRECTION.
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
2800 Generic function used by `bibtex-pop-previous' and `bibtex-pop-next'."
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2801 ;; parse current field
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2802 (let* ((bounds (bibtex-enclosing-field t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2803 (start-old-field (bibtex-start-of-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2804 (start-old-text (bibtex-start-of-text-in-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2805 (end-old-text (bibtex-end-of-text-in-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2806 (field-name (bibtex-name-in-field bounds t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2807 failure)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2808 (save-excursion
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2809 ;; if executed several times in a row, start each search where
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2810 ;; the last one was finished
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2811 (cond ((eq last-command 'bibtex-pop)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2812 (goto-char (if (eq direction 'previous)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2813 bibtex-pop-previous-search-point
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2814 bibtex-pop-next-search-point)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2815 ((eq direction 'previous)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2816 (bibtex-beginning-of-entry))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2817 (t (bibtex-end-of-entry)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2818 ;; Search for arg'th previous/next similar field
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2819 (while (and (not failure)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2820 (>= (setq arg (1- arg)) 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2821 ;; The search of BibTeX fields is not bounded by entry boundaries
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2822 (if (eq direction 'previous)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2823 (if (setq bounds (bibtex-search-backward-field field-name))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2824 (goto-char (bibtex-start-of-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2825 (setq failure t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2826 (if (setq bounds (bibtex-search-forward-field field-name))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2827 (goto-char (bibtex-end-of-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2828 (setq failure t))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2829 (if failure
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2830 (error "No %s matching BibTeX field"
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2831 (if (eq direction 'previous) "previous" "next"))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2832 ;; Found a matching field. Remember boundaries.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2833 (let ((new-text (bibtex-text-in-field-bounds bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2834 (nbeg (copy-marker (bibtex-start-of-field bounds)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2835 (nend (copy-marker (bibtex-end-of-field bounds))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2836 (bibtex-flash-head "From: ")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2837 ;; Go back to where we started, delete old text, and pop new.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2838 (goto-char end-old-text)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2839 (delete-region start-old-text end-old-text)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2840 (if (= nbeg start-old-field)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2841 (insert (bibtex-field-left-delimiter)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2842 (bibtex-field-right-delimiter))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2843 (insert new-text))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2844 (setq bibtex-pop-previous-search-point (marker-position nbeg)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2845 bibtex-pop-next-search-point (marker-position nend))))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
2846 (bibtex-find-text nil nil nil t)
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2847 (setq this-command 'bibtex-pop))
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2848
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2849 (defun bibtex-beginning-of-field ()
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2850 "Move point backward to beginning of field.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2851 This function uses a simple, fast algorithm assuming that the field
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2852 begins at the beginning of a line. We use this function for font-locking."
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2853 (let ((field-reg (concat "^[ \t]*" bibtex-field-name "[ \t]*=")))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2854 (beginning-of-line)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2855 (unless (looking-at field-reg)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2856 (re-search-backward field-reg nil t))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2857
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2858 (defun bibtex-font-lock-url (bound &optional no-button)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2859 "Font-lock for URLs. BOUND limits the search.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2860 If NO-BUTTON is non-nil do not generate buttons."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2861 (let ((case-fold-search t)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2862 (pnt (point))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2863 name bounds start end found)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2864 (bibtex-beginning-of-field)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2865 (while (and (not found)
66116
cff7c706ba17 (bibtex-font-lock-url): Catch when point past bound of search.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66114
diff changeset
2866 (<= (point) bound)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2867 (prog1 (re-search-forward bibtex-font-lock-url-regexp bound t)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2868 (setq name (match-string-no-properties 1)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2869 (setq bounds (bibtex-parse-field-text))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2870 (progn
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
2871 (setq start (car bounds) end (nth 1 bounds))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2872 ;; Always ignore field delimiters
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2873 (if (memq (char-before end) '(?\} ?\"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2874 (setq end (1- end)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2875 (if (memq (char-after start) '(?\{ ?\"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2876 (setq start (1+ start)))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2877 (if (< start pnt) (setq start (min pnt end)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2878 (<= start bound)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2879 (if (<= pnt start)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2880 (let ((lst bibtex-generate-url-list) url)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2881 (while (and (not found) (setq url (car (pop lst))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2882 (goto-char start)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2883 (setq found (and (bibtex-string= name (car url))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2884 (re-search-forward (cdr url) end t))))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2885 (unless found (goto-char end)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2886 (if (and found (not no-button))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2887 (bibtex-button (match-beginning 0) (match-end 0)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2888 'bibtex-url (match-beginning 0)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2889 found))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2890
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2891 (defun bibtex-font-lock-crossref (bound)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2892 "Font-lock for crossref fields. BOUND limits the search."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2893 (let ((case-fold-search t)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2894 (pnt (point))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2895 (crossref-reg (concat "^[ \t]*crossref[ \t]*=[ \t\n]*"
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2896 "\\(\"[^\"]*\"\\|{[^}]*}\\)[ \t\n]*[,})]"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2897 start end found)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2898 (bibtex-beginning-of-field)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2899 (while (and (not found)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2900 (re-search-forward crossref-reg bound t))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2901 (setq start (1+ (match-beginning 1))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2902 end (1- (match-end 1))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2903 found (>= start pnt)))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2904 (if found (bibtex-button start end 'bibtex-search-crossref
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2905 (buffer-substring-no-properties start end)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2906 start t))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2907 found))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2908
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2909 (defun bibtex-font-lock-cite (matcher bound)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2910 "Font-lock for cited keys.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2911 MATCHER identifies the cited key, see `bibtex-cite-matcher-alist'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2912 BOUND limits the search."
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2913 (let (case-fold-search)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2914 (if (re-search-forward (car matcher) bound t)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2915 (let ((start (match-beginning (cdr matcher)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2916 (end (match-end (cdr matcher))))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2917 (bibtex-button start end 'bibtex-search-crossref
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2918 (buffer-substring-no-properties start end)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2919 start t t)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2920 t))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
2921
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2922 (defun bibtex-button-action (button)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2923 "Call BUTTON's BibTeX function."
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2924 (apply (button-get button 'bibtex-function)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2925 (button-get button 'bibtex-args)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2926
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2927 (define-button-type 'bibtex-url
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2928 'action 'bibtex-button-action
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2929 'bibtex-function 'bibtex-url
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2930 'help-echo (purecopy "mouse-2, RET: follow URL"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2931
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2932 (define-button-type 'bibtex-search-crossref
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2933 'action 'bibtex-button-action
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
2934 'bibtex-function 'bibtex-search-crossref
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2935 'help-echo (purecopy "mouse-2, RET: follow crossref"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2936
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2937 (defun bibtex-button (beg end type &rest args)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2938 "Make a BibTeX button from BEG to END of type TYPE in the current buffer."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2939 (make-text-button beg end 'type type 'bibtex-args args))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
2940
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2941
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2942 ;; Interactive Functions:
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2943
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2944 ;;;###autoload
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2945 (defun bibtex-mode ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2946 "Major mode for editing BibTeX files.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2947
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2948 General information on working with BibTeX mode:
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2949
101233
680e69b3c8ed (bibtex-format-entry): For updating field delimiters, allow
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101166
diff changeset
2950 Use commands such as \\<bibtex-mode-map>\\[bibtex-Book] to get a template for a specific entry.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2951 Then fill in all desired fields using \\[bibtex-next-field] to jump from field
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2952 to field. After having filled in all desired fields in the entry, clean the
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2953 new entry with the command \\[bibtex-clean-entry].
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2954
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2955 Some features of BibTeX mode are available only by setting the variable
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
2956 `bibtex-maintain-sorted-entries' to non-nil. However, then BibTeX mode
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
2957 works only with buffers containing valid (syntactical correct) and sorted
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
2958 entries. This is usually the case, if you have created a buffer completely
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
2959 with BibTeX mode and finished every new entry with \\[bibtex-clean-entry].
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2960
62077
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
2961 For third party BibTeX files, call the command \\[bibtex-convert-alien]
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2962 to fully take advantage of all features of BibTeX mode.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2963
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2964
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2965 Special information:
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2966
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
2967 A command such as \\[bibtex-Book] outlines the fields for a BibTeX book entry.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2968
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2969 The names of optional fields start with the string OPT, and are thus ignored
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2970 by BibTeX. The names of alternative fields from which only one is required
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2971 start with the string ALT. The OPT or ALT string may be removed from
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2972 the name of a field with \\[bibtex-remove-OPT-or-ALT].
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2973 \\[bibtex-make-field] inserts a new field after the current one.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2974 \\[bibtex-kill-field] kills the current field entirely.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2975 \\[bibtex-yank] yanks the last recently killed field after the current field.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2976 \\[bibtex-remove-delimiters] removes the double-quotes or braces around the text of the current field.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2977 \\[bibtex-empty-field] replaces the text of the current field with the default \"\" or {}.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2978 \\[bibtex-find-text] moves point to the end of the current field.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2979 \\[bibtex-complete] completes word fragment before point according to context.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2980
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2981 The command \\[bibtex-clean-entry] cleans the current entry, i.e. it removes OPT/ALT
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2982 from the names of all non-empty optional or alternative fields, checks that
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2983 no required fields are empty, and does some formatting dependent on the value
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2984 of `bibtex-entry-format'. Furthermore, it can automatically generate a key
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2985 for the BibTeX entry, see `bibtex-generate-autokey'.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2986 Note: some functions in BibTeX mode depend on entries being in a special
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2987 format (all fields beginning on separate lines), so it is usually a bad
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2988 idea to remove `realign' from `bibtex-entry-format'.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2989
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2990 BibTeX mode supports Imenu and hideshow minor mode (`hs-minor-mode').
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2991
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2992 ----------------------------------------------------------
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2993 Entry to BibTeX mode calls the value of `bibtex-mode-hook'
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
2994 if that value is non-nil.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2995
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2996 \\{bibtex-mode-map}"
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2997 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2998 (kill-all-local-variables)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2999 (use-local-map bibtex-mode-map)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3000 (setq major-mode 'bibtex-mode)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3001 (setq mode-name "BibTeX")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3002 (set-syntax-table bibtex-mode-syntax-table)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3003 (make-local-variable 'bibtex-buffer-last-parsed-tick)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3004 ;; Install stealthy parse function if not already installed
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3005 (unless bibtex-parse-idle-timer
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3006 (setq bibtex-parse-idle-timer (run-with-idle-timer
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3007 bibtex-parse-keys-timeout t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3008 'bibtex-parse-buffers-stealthily)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3009 (set (make-local-variable 'paragraph-start) "[ \f\n\t]*$")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3010 (set (make-local-variable 'comment-start) bibtex-comment-start)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3011 (set (make-local-variable 'comment-start-skip)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3012 (concat (regexp-quote bibtex-comment-start) "\\>[ \t]*"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3013 (set (make-local-variable 'comment-column) 0)
61439
267229876c56 (bibtex-autokey-titleword-ignore, bibtex-reference-key)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61247
diff changeset
3014 (set (make-local-variable 'defun-prompt-regexp) "^[ \t]*@[[:alnum:]]+[ \t]*")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3015 (set (make-local-variable 'outline-regexp) "[ \t]*@")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3016 (set (make-local-variable 'fill-paragraph-function) 'bibtex-fill-field)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3017 (set (make-local-variable 'fill-prefix) (make-string (+ bibtex-entry-offset
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3018 bibtex-contline-indentation)
64054
23a07b9b6687 (bibtex, bibtex-autokey): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63470
diff changeset
3019 ?\s))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3020 (set (make-local-variable 'font-lock-defaults)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3021 '(bibtex-font-lock-keywords
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3022 nil t ((?$ . "\"")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3023 ;; Mathematical expressions should be fontified as strings
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3024 (?\" . ".")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3025 ;; Quotes are field delimiters and quote-delimited
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3026 ;; entries should be fontified in the same way as
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3027 ;; brace-delimited ones
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3028 )
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3029 nil
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3030 (font-lock-extra-managed-props . (category))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3031 (font-lock-mark-block-function
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3032 . (lambda ()
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3033 (set-mark (bibtex-end-of-entry))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3034 (bibtex-beginning-of-entry)))))
110305
b10051866f51 New syntax-propertize functionality.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 110236
diff changeset
3035 (set (make-local-variable 'syntax-propertize-function)
b10051866f51 New syntax-propertize functionality.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 110236
diff changeset
3036 (syntax-propertize-via-font-lock
b10051866f51 New syntax-propertize functionality.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 110236
diff changeset
3037 bibtex-font-lock-syntactic-keywords))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3038 (setq imenu-generic-expression
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3039 (list (list nil bibtex-entry-head bibtex-key-in-head))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3040 imenu-case-fold-search t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3041 (make-local-variable 'choose-completion-string-functions)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3042 ;; XEmacs needs `easy-menu-add', Emacs does not care
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
3043 (easy-menu-add bibtex-edit-menu)
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
3044 (easy-menu-add bibtex-entry-menu)
61439
267229876c56 (bibtex-autokey-titleword-ignore, bibtex-reference-key)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61247
diff changeset
3045 (run-mode-hooks 'bibtex-mode-hook))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3046
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3047 (defun bibtex-field-list (entry-type)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3048 "Return list of allowed fields for entry ENTRY-TYPE.
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3049 More specifically, the return value is a cons pair (REQUIRED . OPTIONAL),
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3050 where REQUIRED and OPTIONAL are lists of the required and optional field
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3051 names for ENTRY-TYPE according to `bibtex-entry-field-alist',
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3052 `bibtex-include-OPTkey', `bibtex-include-OPTcrossref',
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3053 and `bibtex-user-optional-fields'."
55730
b4eeb441c089 Use assoc-string, not assoc-ignore-case.
Richard M. Stallman <rms@gnu.org>
parents: 55348
diff changeset
3054 (let ((e (assoc-string entry-type bibtex-entry-field-alist t))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3055 required optional)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3056 (unless e
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3057 (error "Fields for BibTeX entry type %s not defined" entry-type))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3058 (if (and (member-ignore-case entry-type bibtex-include-OPTcrossref)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3059 (nth 2 e))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3060 (setq required (nth 0 (nth 2 e))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3061 optional (nth 1 (nth 2 e)))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3062 (setq required (nth 0 (nth 1 e))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3063 optional (nth 1 (nth 1 e))))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3064 (if bibtex-include-OPTkey
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3065 (push (list "key"
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3066 "Used for reference key creation if author and editor fields are missing"
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3067 (if (or (stringp bibtex-include-OPTkey)
77217
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3068 (functionp bibtex-include-OPTkey))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3069 bibtex-include-OPTkey))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3070 optional))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3071 (if (member-ignore-case entry-type bibtex-include-OPTcrossref)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3072 (push '("crossref" "Reference key of the cross-referenced entry")
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3073 optional))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3074 (setq optional (append optional bibtex-user-optional-fields))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3075 (cons required optional)))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3076
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3077 (defun bibtex-entry (entry-type)
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3078 "Insert a new BibTeX entry of type ENTRY-TYPE.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3079 After insertion call the value of `bibtex-add-entry-hook' if that value
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3080 is non-nil."
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3081 (interactive
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3082 (let ((completion-ignore-case t))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3083 (list (completing-read "Entry Type: " bibtex-entry-field-alist
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3084 nil t nil 'bibtex-entry-type-history))))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3085 (let ((key (if bibtex-maintain-sorted-entries
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3086 (bibtex-read-key (format "%s key: " entry-type))))
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3087 (field-list (bibtex-field-list entry-type)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3088 (unless (bibtex-prepare-new-entry (list key nil entry-type))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3089 (error "Entry with key `%s' already exists" key))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3090 (indent-to-column bibtex-entry-offset)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3091 (insert "@" entry-type (bibtex-entry-left-delimiter))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3092 (if key (insert key))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3093 (save-excursion
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3094 (mapc 'bibtex-make-field (car field-list))
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3095 (mapc 'bibtex-make-optional-field (cdr field-list))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3096 (if bibtex-comma-after-last-field
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3097 (insert ","))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3098 (insert "\n")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3099 (indent-to-column bibtex-entry-offset)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3100 (insert (bibtex-entry-right-delimiter) "\n\n"))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3101 (bibtex-next-field t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3102 (if (member-ignore-case entry-type bibtex-autofill-types)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3103 (bibtex-autofill-entry))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3104 (run-hooks 'bibtex-add-entry-hook)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3105
69887
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3106 (defun bibtex-entry-update (&optional entry-type)
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3107 "Update an existing BibTeX entry.
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3108 In the BibTeX entry at point, make new fields for those items that may occur
69887
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3109 according to `bibtex-field-list', but are not yet present.
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3110 Also, add field delimiters to numerical fields if they are not present.
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3111 If ENTRY-TYPE is non-nil, change first the entry type to ENTRY-TYPE.
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3112 When called interactively with a prefix arg, query for a value of ENTRY-TYPE."
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3113 (interactive
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3114 (list (if current-prefix-arg
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3115 (let ((completion-ignore-case t))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3116 (completing-read "New entry type: " bibtex-entry-field-alist
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3117 nil t nil 'bibtex-entry-type-history)))))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3118 (save-excursion
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3119 (bibtex-beginning-of-entry)
69887
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3120 (when (looking-at bibtex-entry-maybe-empty-head)
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3121 (goto-char (match-end 0))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3122 (if entry-type
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3123 (save-excursion
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3124 (replace-match (concat "@" entry-type) nil nil nil 1))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3125 (setq entry-type (bibtex-type-in-head)))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3126 (let* ((field-list (bibtex-field-list entry-type))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3127 (required (copy-tree (car field-list)))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3128 (optional (copy-tree (cdr field-list)))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3129 bounds)
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3130 (while (setq bounds (bibtex-parse-field))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3131 (let ((fname (bibtex-name-in-field bounds t))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3132 (end (copy-marker (bibtex-end-of-field bounds) t)))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3133 (setq required (delete (assoc-string fname required t) required)
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3134 optional (delete (assoc-string fname optional t) optional))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3135 (when (string-match "\\`[0-9]+\\'"
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3136 (bibtex-text-in-field-bounds bounds))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3137 (goto-char (bibtex-end-of-text-in-field bounds))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3138 (insert (bibtex-field-right-delimiter))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3139 (goto-char (bibtex-start-of-text-in-field bounds))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3140 (insert (bibtex-field-left-delimiter)))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3141 (goto-char end)))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3142 (skip-chars-backward " \t\n")
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3143 (dolist (field required) (bibtex-make-field field))
14e2e318d372 (bibtex-entry-update): New optional arg entry-type. Add field
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69886
diff changeset
3144 (dolist (field optional) (bibtex-make-optional-field field))))))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3145
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3146 (defun bibtex-parse-entry (&optional content)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3147 "Parse entry at point, return an alist.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3148 The alist elements have the form (FIELD . TEXT), where FIELD can also be
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3149 the special strings \"=type=\" and \"=key=\". For the FIELD \"=key=\"
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3150 TEXT may be nil. Remove \"OPT\" and \"ALT\" from FIELD.
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3151 Move point to the end of the last field.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3152 If optional arg CONTENT is non-nil extract content of text fields."
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3153 (let (alist bounds)
55880
1b2cb608f18e (bibtex-format-entry): Fix regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55730
diff changeset
3154 (when (looking-at bibtex-entry-maybe-empty-head)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3155 (push (cons "=type=" (bibtex-type-in-head)) alist)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3156 (push (cons "=key=" (bibtex-key-in-head)) alist)
55880
1b2cb608f18e (bibtex-format-entry): Fix regexps.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55730
diff changeset
3157 (goto-char (match-end 0))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3158 (while (setq bounds (bibtex-parse-field))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3159 (push (cons (bibtex-name-in-field bounds t)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3160 (bibtex-text-in-field-bounds bounds content))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3161 alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3162 (goto-char (bibtex-end-of-field bounds))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3163 alist))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3164
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3165 (defun bibtex-autofill-entry ()
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3166 "Try to fill fields of current BibTeX entry based on neighboring entries.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3167 The current entry must have a key. Determine the neighboring entry
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3168 \(previouse or next\) whose key is more similar to the key of the current
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3169 entry. For all empty fields of the current entry insert the corresponding
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3170 field contents of the neighboring entry. Finally try to update the text
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3171 based on the difference between the keys of the neighboring and the current
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3172 entry (for example, the year parts of the keys)."
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3173 (interactive)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3174 (bibtex-beginning-of-entry)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3175 (when (looking-at bibtex-entry-head)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3176 (let ((type (bibtex-type-in-head))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3177 (key (bibtex-key-in-head))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3178 (key-end (match-end bibtex-key-in-head))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3179 (case-fold-search t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3180 (bibtex-sort-ignore-string-entries t)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3181 tmp other-key other bounds)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3182 ;; The fields we want to change start right after the key.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3183 (goto-char key-end)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3184 ;; First see whether to use the previous or the next entry
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3185 ;; for "inspiration".
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3186 (save-excursion
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3187 (goto-char (1- (match-beginning 0)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3188 (bibtex-beginning-of-entry)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3189 (if (and (looking-at bibtex-entry-head)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3190 (bibtex-string= type (bibtex-type-in-head))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3191 ;; In case we found ourselves :-(
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3192 (not (equal key (setq tmp (bibtex-key-in-head)))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3193 (setq other-key tmp
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3194 other (point))))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3195 (save-excursion
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3196 (bibtex-end-of-entry)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3197 (bibtex-skip-to-valid-entry)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3198 (if (and (looking-at bibtex-entry-head)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3199 (bibtex-string= type (bibtex-type-in-head))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3200 ;; In case we found ourselves :-(
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3201 (not (equal key (setq tmp (bibtex-key-in-head))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3202 (or (not other-key)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3203 ;; Check which is the best match.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3204 (< (length (try-completion "" (list key other-key)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3205 (length (try-completion "" (list key tmp))))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3206 (setq other-key tmp
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3207 other (point))))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3208 ;; Then fill the new entry's fields with the chosen other entry.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3209 (when other
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3210 (setq other (save-excursion (goto-char other) (bibtex-parse-entry)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3211 (setq key-end (point)) ;In case parse-entry changed the buffer.
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3212 (while (setq bounds (bibtex-parse-field))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3213 (let ((text (assoc-string (bibtex-name-in-field bounds t)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3214 other t)))
59733
96d73eb02751 (bibtex-format-entry): Use `bibtex-empty-field-re' only on the text of
Lute Kamstra <lute@gnu.org>
parents: 58772
diff changeset
3215 (if (not (and text
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3216 (equal "" (bibtex-text-in-field-bounds bounds t))))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3217 (goto-char (bibtex-end-of-field bounds))
59733
96d73eb02751 (bibtex-format-entry): Use `bibtex-empty-field-re' only on the text of
Lute Kamstra <lute@gnu.org>
parents: 58772
diff changeset
3218 (goto-char (bibtex-start-of-text-in-field bounds))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3219 (delete-region (point) (bibtex-end-of-text-in-field bounds))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3220 (insert (cdr text)))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3221 ;; Finally try to update the text based on the difference between
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3222 ;; the two keys.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3223 (let* ((prefix (try-completion "" (list key other-key)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3224 ;; If the keys are foo91 and foo92, don't replace 1 for 2
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3225 ;; but 91 for 92 instead.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3226 (_ (if (string-match "[0-9]+\\'" prefix)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3227 (setq prefix (substring prefix 0 (match-beginning 0)))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3228 (suffix (substring key (length prefix)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3229 (other-suffix (substring other-key (length prefix))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3230 (while (re-search-backward (regexp-quote other-suffix) key-end 'move)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3231 (replace-match suffix)))))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3232
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3233 (defun bibtex-print-help-message (&optional field comma)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3234 "Print helpful information about current FIELD in current BibTeX entry.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3235 Optional arg COMMA is as in `bibtex-enclosing-field'. It is t for
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3236 interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3237 (interactive (list nil t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3238 (unless field (setq field (car (bibtex-find-text-internal nil nil comma))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3239 (if (string-match "@" field)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3240 (cond ((bibtex-string= field "@string")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3241 (message "String definition"))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3242 ((bibtex-string= field "@preamble")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3243 (message "Preamble definition"))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3244 (t (message "Entry key")))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3245 (let* ((case-fold-search t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3246 (type (save-excursion
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3247 (bibtex-beginning-of-entry)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3248 (looking-at bibtex-entry-maybe-empty-head)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3249 (bibtex-type-in-head)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3250 (field-list (bibtex-field-list type))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3251 (comment (assoc-string field (append (car field-list)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3252 (cdr field-list)) t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3253 (if comment (message "%s" (nth 1 comment))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3254 (message "No comment available")))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3255
77206
389303f02afc (bibtex-insert-kill): Pass non-nil NODELIM arg to bibtex-make-field.
Glenn Morris <rgm@gnu.org>
parents: 75356
diff changeset
3256 (defun bibtex-make-field (field &optional move interactive nodelim)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3257 "Make a field named FIELD in current BibTeX entry.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3258 FIELD is either a string or a list of the form
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3259 \(FIELD-NAME COMMENT-STRING INIT ALTERNATIVE-FLAG) as in
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3260 `bibtex-entry-field-alist'.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3261 If MOVE is non-nil, move point past the present field before making
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3262 the new field. If INTERACTIVE is non-nil, move point to the end of
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3263 the new field. Otherwise move point past the new field.
77206
389303f02afc (bibtex-insert-kill): Pass non-nil NODELIM arg to bibtex-make-field.
Glenn Morris <rgm@gnu.org>
parents: 75356
diff changeset
3264 MOVE and INTERACTIVE are t when called interactively.
77217
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3265 INIT is surrounded by field delimiters, unless NODELIM is non-nil."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3266 (interactive
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3267 (list (let ((completion-ignore-case t)
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3268 (field-list (bibtex-field-list
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3269 (save-excursion
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3270 (bibtex-beginning-of-entry)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3271 (looking-at bibtex-any-entry-maybe-empty-head)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3272 (bibtex-type-in-head)))))
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3273 (completing-read "BibTeX field name: "
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3274 (append (car field-list) (cdr field-list))
57819
cc6cd5062afb (bibtex-make-field): Don't use interactive-p.
Richard M. Stallman <rms@gnu.org>
parents: 57815
diff changeset
3275 nil nil nil bibtex-field-history))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3276 t t))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3277 (unless (consp field)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3278 (setq field (list field)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3279 (when move
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3280 (bibtex-find-text)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3281 (if (looking-at "[}\"]")
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3282 (forward-char)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3283 (insert ",\n")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3284 (indent-to-column (+ bibtex-entry-offset bibtex-field-indentation))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3285 (if (nth 3 field) (insert "ALT"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3286 (insert (car field) " ")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3287 (if bibtex-align-at-equal-sign
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3288 (indent-to-column (+ bibtex-entry-offset
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3289 (- bibtex-text-indentation 2))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3290 (insert "= ")
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3291 (unless bibtex-align-at-equal-sign
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3292 (indent-to-column (+ bibtex-entry-offset
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3293 bibtex-text-indentation)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3294 (let ((init (nth 2 field)))
77217
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3295 (if (not init) (setq init "")
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3296 (if (functionp init) (setq init (funcall init)))
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3297 (unless (stringp init) (error "`%s' is not a string" init)))
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3298 ;; NODELIM is required by `bibtex-insert-kill'
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3299 (if nodelim (insert init)
f00e4356c78d (bibtex-field-list): Use functionp.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77206
diff changeset
3300 (insert (bibtex-field-left-delimiter) init
77206
389303f02afc (bibtex-insert-kill): Pass non-nil NODELIM arg to bibtex-make-field.
Glenn Morris <rgm@gnu.org>
parents: 75356
diff changeset
3301 (bibtex-field-right-delimiter))))
57833
1a602333ec1d (bibtex-make-field): Fix typo.
John Paul Wallington <jpw@pobox.com>
parents: 57819
diff changeset
3302 (when interactive
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3303 ;; (bibtex-find-text nil nil bibtex-help-message)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3304 (if (memq (preceding-char) '(?} ?\")) (forward-char -1))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3305 (if bibtex-help-message (bibtex-print-help-message (car field)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3306
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3307 (defun bibtex-beginning-of-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3308 "Move to beginning of BibTeX entry (beginning of line).
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3309 If inside an entry, move to the beginning of it, otherwise move to the
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3310 beginning of the previous entry. If point is ahead of all BibTeX entries
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3311 move point to the beginning of buffer. Return the new location of point."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3312 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3313 (skip-chars-forward " \t")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3314 (if (looking-at "@")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3315 (forward-char))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3316 (re-search-backward "^[ \t]*@" nil 'move)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3317 (point))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3318
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3319 (defun bibtex-end-of-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3320 "Move to end of BibTeX entry (past the closing brace).
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3321 If inside an entry, move to the end of it, otherwise move to the end
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3322 of the previous entry. Do not move if ahead of first entry.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3323 Return the new location of point."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3324 (interactive)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3325 (let ((case-fold-search t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3326 (pnt (point))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3327 (_ (bibtex-beginning-of-entry))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3328 (bounds (bibtex-valid-entry t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3329 (cond (bounds (goto-char (cdr bounds))) ; regular entry
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3330 ;; @String or @Preamble
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3331 ((setq bounds (or (bibtex-parse-string t) (bibtex-parse-preamble)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3332 (goto-char (bibtex-end-of-string bounds)))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3333 ((looking-at bibtex-any-valid-entry-type)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3334 ;; Parsing of entry failed
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3335 (error "Syntactically incorrect BibTeX entry starts here"))
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105170
diff changeset
3336 (t (if (called-interactively-p 'interactive)
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105170
diff changeset
3337 (message "Not on a known BibTeX entry."))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3338 (goto-char pnt)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3339 (point)))
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3340
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3341 (defun bibtex-goto-line (arg)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3342 "Goto line ARG, counting from beginning of (narrowed) buffer."
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3343 ;; code adapted from `goto-line'
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3344 (goto-char (point-min))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3345 (if (eq selective-display t)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3346 (re-search-forward "[\n\C-m]" nil 'end (1- arg))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3347 (forward-line (1- arg))))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3348
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3349 (defun bibtex-reposition-window ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3350 "Make the current BibTeX entry visible.
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3351 If entry is smaller than `window-body-height', entry is centered in window.
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3352 Otherwise display the beginning of entry."
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3353 (interactive)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3354 (let ((pnt (point))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3355 (beg (line-number-at-pos (bibtex-beginning-of-entry)))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3356 (end (line-number-at-pos (bibtex-end-of-entry))))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3357 (if (> (window-body-height) (- end beg))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3358 ;; entry fits in current window
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3359 (progn
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3360 (bibtex-goto-line (/ (+ 1 beg end) 2))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3361 (recenter)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3362 (goto-char pnt))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3363 ;; entry too large for current window
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3364 (bibtex-goto-line beg)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3365 (recenter 0)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3366 (if (> (1+ (- (line-number-at-pos pnt) beg))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3367 (window-body-height))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3368 (bibtex-goto-line beg)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3369 (goto-char pnt)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3370
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3371 (defun bibtex-mark-entry ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3372 "Put mark at beginning, point at end of current BibTeX entry."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3373 (interactive)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3374 (push-mark (bibtex-beginning-of-entry))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3375 (bibtex-end-of-entry))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3376
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3377 (defun bibtex-count-entries (&optional count-string-entries)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3378 "Count number of entries in current buffer or region.
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3379 With prefix argument COUNT-STRING-ENTRIES count all entries,
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3380 otherwise count all entries except @String entries.
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3381 If mark is active count entries in region, if not in whole buffer."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3382 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3383 (let ((number 0)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3384 (bibtex-sort-ignore-string-entries (not count-string-entries)))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3385 (save-restriction
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3386 (if mark-active (narrow-to-region (region-beginning) (region-end)))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3387 (bibtex-map-entries (lambda (key beg end) (setq number (1+ number)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3388 (message "%s contains %d entries."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3389 (if mark-active "Region" "Buffer")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3390 number)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3391
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3392 (defun bibtex-ispell-entry ()
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3393 "Check BibTeX entry for spelling errors."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3394 (interactive)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3395 (ispell-region (save-excursion (bibtex-beginning-of-entry))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3396 (save-excursion (bibtex-end-of-entry))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3397
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3398 (defun bibtex-ispell-abstract ()
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3399 "Check abstract of BibTeX entry for spelling errors."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3400 (interactive)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3401 (let ((bounds (save-excursion
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3402 (bibtex-beginning-of-entry)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3403 (bibtex-search-forward-field "abstract" t))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3404 (if bounds
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3405 (ispell-region (bibtex-start-of-text-in-field bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3406 (bibtex-end-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3407 (error "No abstract in entry"))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3408
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3409 (defun bibtex-narrow-to-entry ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3410 "Narrow buffer to current BibTeX entry."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3411 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3412 (save-excursion
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3413 (widen)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3414 (narrow-to-region (bibtex-beginning-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3415 (bibtex-end-of-entry))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3416
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3417 (defun bibtex-entry-index ()
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3418 "Return index of BibTeX entry head at or past position of point.
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3419 The index is a list (KEY CROSSREF-KEY ENTRY-TYPE) that is used for sorting
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3420 the entries of the BibTeX buffer. CROSSREF-KEY is nil unless the value
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3421 of `bibtex-maintain-sorted-entries' is `crossref'. Move point to the end
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3422 of the head of the entry found. Return nil if no entry found."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3423 (let ((case-fold-search t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3424 (if (re-search-forward bibtex-entry-maybe-empty-head nil t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3425 (let ((key (bibtex-key-in-head))
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3426 ;; all entry types should be downcase (for ease of comparison)
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3427 (entry-type (downcase (bibtex-type-in-head))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3428 ;; Don't search CROSSREF-KEY if we don't need it.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3429 (if (eq bibtex-maintain-sorted-entries 'crossref)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3430 (let ((bounds (bibtex-search-forward-field
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3431 "\\(OPT\\)?crossref" t)))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3432 (list key
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3433 (if bounds (bibtex-text-in-field-bounds bounds t))
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3434 entry-type))
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3435 (list key nil entry-type))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3436
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3437 (defun bibtex-init-sort-entry-class-alist ()
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3438 "Initialize `bibtex-sort-entry-class-alist' (buffer-local)."
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3439 (unless (local-variable-p 'bibtex-sort-entry-class-alist)
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3440 (set (make-local-variable 'bibtex-sort-entry-class-alist)
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3441 (let ((i -1) alist)
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3442 (dolist (class bibtex-sort-entry-class alist)
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3443 (setq i (1+ i))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3444 (dolist (entry class)
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3445 ;; All entry types should be downcase (for ease of comparison).
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3446 (push (cons (if (stringp entry) (downcase entry) entry) i)
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3447 alist)))))))
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3448
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3449 (defun bibtex-lessp (index1 index2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3450 "Predicate for sorting BibTeX entries with indices INDEX1 and INDEX2.
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3451 Each index is a list (KEY CROSSREF-KEY ENTRY-TYPE).
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3452 The predicate depends on the variable `bibtex-maintain-sorted-entries'.
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
3453 If its value is nil use plain sorting."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3454 (cond ((not index1) (not index2)) ; indices can be nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3455 ((not index2) nil)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3456 ((eq bibtex-maintain-sorted-entries 'crossref)
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3457 ;; CROSSREF-KEY may be nil or it can point to an entry
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3458 ;; in another BibTeX file. In both cases we ignore CROSSREF-KEY.
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3459 (if (and (nth 1 index1)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3460 (cdr (assoc-string (nth 1 index1) bibtex-reference-keys)))
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3461 (if (and (nth 1 index2)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3462 (cdr (assoc-string (nth 1 index2) bibtex-reference-keys)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3463 (or (string-lessp (nth 1 index1) (nth 1 index2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3464 (and (string-equal (nth 1 index1) (nth 1 index2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3465 (string-lessp (nth 0 index1) (nth 0 index2))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3466 (not (string-lessp (nth 0 index2) (nth 1 index1))))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3467 (if (and (nth 1 index2)
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3468 (cdr (assoc-string (nth 1 index2) bibtex-reference-keys)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3469 (string-lessp (nth 0 index1) (nth 1 index2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3470 (string-lessp (nth 0 index1) (nth 0 index2)))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3471 ((eq bibtex-maintain-sorted-entries 'entry-class)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3472 (let ((n1 (cdr (or (assoc (nth 2 index1) bibtex-sort-entry-class-alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3473 (assoc 'catch-all bibtex-sort-entry-class-alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3474 '(nil . 1000)))) ; if there is nothing else
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3475 (n2 (cdr (or (assoc (nth 2 index2) bibtex-sort-entry-class-alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3476 (assoc 'catch-all bibtex-sort-entry-class-alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3477 '(nil . 1000))))) ; if there is nothing else
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3478 (or (< n1 n2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3479 (and (= n1 n2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3480 (string-lessp (car index1) (car index2))))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3481 (t ; (eq bibtex-maintain-sorted-entries 'plain)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3482 (string-lessp (car index1) (car index2)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3483
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3484 (defun bibtex-sort-buffer ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3485 "Sort BibTeX buffer alphabetically by key.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3486 The predicate for sorting is defined via `bibtex-maintain-sorted-entries'.
57070
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3487 If its value is nil use plain sorting. Text outside of BibTeX entries is not
3d9707888790 (bibtex-generate-url-list): Change format. Provide a sample complex default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57054
diff changeset
3488 affected. If `bibtex-sort-ignore-string-entries' is non-nil, @String entries
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3489 are ignored."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3490 (interactive)
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3491 (bibtex-beginning-of-first-entry) ; Needed by `sort-subr'
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3492 (bibtex-init-sort-entry-class-alist) ; Needed by `bibtex-lessp'.
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3493 (if (and (eq bibtex-maintain-sorted-entries 'crossref)
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
3494 (functionp bibtex-reference-keys))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3495 (bibtex-parse-keys)) ; Needed by `bibtex-lessp'.
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3496 (sort-subr nil
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3497 'bibtex-skip-to-valid-entry ; NEXTREC function
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3498 'bibtex-end-of-entry ; ENDREC function
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3499 'bibtex-entry-index ; STARTKEY function
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3500 nil ; ENDKEY function
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3501 'bibtex-lessp)) ; PREDICATE
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3502
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3503 (defun bibtex-search-crossref (crossref-key &optional pnt split noerror)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3504 "Move point to the beginning of BibTeX entry CROSSREF-KEY.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3505 If `bibtex-files' is non-nil, search all these files.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3506 Otherwise the search is limited to the current buffer.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3507 Return position of entry if CROSSREF-KEY is found or nil otherwise.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3508 If CROSSREF-KEY is in the same buffer like current entry but before it
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3509 an error is signaled. If NOERRER is non-nil this error is suppressed.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3510 Optional arg PNT is the position of the referencing entry. It defaults
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3511 to position of point. If optional arg SPLIT is non-nil, split window
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3512 so that both the referencing and the crossrefed entry are displayed.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3513
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3514 If called interactively, CROSSREF-KEY defaults to either the crossref key
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3515 of current entry or a key matched by `bibtex-cite-matcher-alist',
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3516 whatever is nearer to the position of point. SPLIT is t. NOERROR is nil
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3517 for a crossref key, t otherwise."
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3518 (interactive
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3519 (save-excursion
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3520 (let* ((pnt (point))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3521 (_ (bibtex-beginning-of-entry))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3522 (end (cdr (bibtex-valid-entry t)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3523 (_ (unless end (error "Not inside valid entry")))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3524 (beg (match-end 0)) ; set by `bibtex-valid-entry'
102868
cf16d0f54438 (bibtex-format-entry, bibtex-search-crossref): Allow OPT prefix for
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 102133
diff changeset
3525 (bounds (bibtex-search-forward-field "\\(OPT\\)?crossref" end))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3526 case-fold-search best temp crossref-key)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3527 (if bounds
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3528 (setq crossref-key (bibtex-text-in-field-bounds bounds t)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3529 best (cons (bibtex-dist pnt (bibtex-end-of-field bounds)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3530 (bibtex-start-of-field bounds))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3531 crossref-key)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3532 (dolist (matcher bibtex-cite-matcher-alist)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3533 (goto-char beg)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3534 (while (re-search-forward (car matcher) end t)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3535 (setq temp (bibtex-dist pnt (match-end (cdr matcher))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3536 (match-beginning (cdr matcher))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3537 ;; Accept the key closest to the position of point.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3538 (if (or (not best) (< temp (car best)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3539 (setq best (cons temp (match-string-no-properties
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3540 (cdr matcher)))))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3541 (goto-char pnt)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3542 (setq temp (bibtex-read-key "Find crossref key: " (cdr best) t))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3543 (list temp (point) t (not (and crossref-key
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3544 (string= temp crossref-key)))))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3545
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3546 (let (buffer pos eqb)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3547 (save-excursion
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3548 (setq pos (bibtex-search-entry crossref-key t)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3549 buffer (current-buffer)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3550 (setq eqb (eq buffer (current-buffer)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3551 (cond ((not pos)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3552 (if split (message "Crossref key `%s' not found" crossref-key)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3553 (split ; called (quasi) interactively
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3554 (unless pnt (setq pnt (point)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3555 (goto-char pnt)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3556 (if (and eqb (= pos (save-excursion (bibtex-beginning-of-entry))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3557 (message "Key `%s' is current entry" crossref-key)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3558 (if eqb (select-window (split-window))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3559 (pop-to-buffer buffer))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3560 (goto-char pos)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3561 (bibtex-reposition-window)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3562 (beginning-of-line)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3563 (if (and eqb (> pnt pos) (not noerror))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3564 (error "The referencing entry must precede the crossrefed entry!"))))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3565 ;; `bibtex-search-crossref' is called noninteractively during
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3566 ;; clean-up of an entry. Then it is not possible to check
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3567 ;; whether the current entry and the crossrefed entry have
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3568 ;; the correct sorting order.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3569 (eqb (goto-char pos))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3570 (t (set-buffer buffer) (goto-char pos)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3571 pos))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3572 ;; backward compatibility
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3573 (defalias 'bibtex-find-crossref 'bibtex-search-crossref)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3574
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3575 (defun bibtex-dist (pos beg end)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3576 "Return distance between POS and region delimited by BEG and END."
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3577 (cond ((and (<= beg pos) (<= pos end)) 0)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3578 ((< pos beg) (- beg pos))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3579 (t (- pos end))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3580
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3581 ;;;###autoload
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3582 (defun bibtex-search-entry (key &optional global start display)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3583 "Move point to the beginning of BibTeX entry named KEY.
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3584 Return position of entry if KEY is found or nil if not found.
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3585 With GLOBAL non-nil, search KEY in `bibtex-files'. Otherwise the search
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3586 is limited to the current buffer. Optional arg START is buffer position
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3587 where the search starts. If it is nil, start search at beginning of buffer.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3588 If DISPLAY is non-nil, display the buffer containing KEY.
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3589 Otherwise, use `set-buffer'.
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3590 When called interactively, GLOBAL is t if there is a prefix arg or the current
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3591 mode is not `bibtex-mode', START is nil, and DISPLAY is t."
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3592 (interactive
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3593 (let ((global (or current-prefix-arg (not (eq major-mode 'bibtex-mode)))))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3594 (list (bibtex-read-key "Find key: " nil global) global nil t)))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3595 (if (and global bibtex-files)
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3596 (let ((buffer-list (bibtex-initialize t))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3597 buffer found)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3598 (while (and (not found)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3599 (setq buffer (pop buffer-list)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3600 (with-current-buffer buffer
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
3601 (if (cdr (assoc-string key bibtex-reference-keys))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3602 ;; `bibtex-search-entry' moves point if key found
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3603 (setq found (bibtex-search-entry key)))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3604 (cond ((and found display)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3605 (let ((same-window-buffer-names
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3606 (cons (buffer-name buffer) same-window-buffer-names)))
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3607 (pop-to-buffer buffer)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3608 (bibtex-reposition-window)))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3609 (found (set-buffer buffer))
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3610 (display (message "Key `%s' not found" key)))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3611 found)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3612
70210
83aa98a17215 (bibtex-find-entry): Don't demand matching case for @Article, etc.
J.D. Smith <jdsmith@as.arizona.edu>
parents: 69887
diff changeset
3613 (let* ((case-fold-search t)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3614 (pnt (save-excursion
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3615 (goto-char (or start (point-min)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3616 (if (re-search-forward (concat "^[ \t]*\\("
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3617 bibtex-entry-type
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3618 "\\)[ \t]*[({][ \t\n]*\\("
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3619 (regexp-quote key)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3620 "\\)[ \t\n]*[,=]")
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3621 nil t)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3622 (match-beginning 0)))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3623 (cond (pnt
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3624 (goto-char pnt)
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3625 (if display (bibtex-reposition-window)))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3626 (display (message "Key `%s' not found" key)))
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3627 pnt)))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3628 ;; backward compatibility
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3629 (defalias 'bibtex-find-entry 'bibtex-search-entry)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3630
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3631 (defun bibtex-prepare-new-entry (index)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3632 "Prepare a new BibTeX entry with index INDEX.
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3633 INDEX is a list (KEY CROSSREF-KEY ENTRY-TYPE).
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3634 Move point where the entry KEY should be placed.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3635 If `bibtex-maintain-sorted-entries' is non-nil, perform a binary
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
3636 search to look for place for KEY. This requires that buffer is sorted,
62077
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
3637 see `bibtex-validate'.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3638 Return t if preparation was successful or nil if entry KEY already exists."
71044
da5fa425123d (bibtex-autokey-name-case-convert-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70841
diff changeset
3639 (bibtex-init-sort-entry-class-alist) ; Needed by `bibtex-lessp'.
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3640 (if (and (eq bibtex-maintain-sorted-entries 'crossref)
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
3641 (functionp bibtex-reference-keys))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3642 (bibtex-parse-keys)) ; Needed by `bibtex-lessp'.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3643 (let ((key (nth 0 index))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3644 key-exist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3645 (cond ((or (null key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3646 (and (stringp key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3647 (string-equal key ""))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3648 (and (not (setq key-exist (bibtex-search-entry key)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3649 (not bibtex-maintain-sorted-entries)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3650 (bibtex-move-outside-of-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3651 ;; if key-exist is non-nil due to the previous cond clause
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3652 ;; then point will be at beginning of entry named key.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3653 (key-exist)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3654 (t ; `bibtex-maintain-sorted-entries' is non-nil
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3655 (let* ((case-fold-search t)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3656 (left (save-excursion (bibtex-beginning-of-first-entry)))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3657 (bounds (save-excursion (goto-char (point-max))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3658 (bibtex-skip-to-valid-entry t)))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3659 (right (if bounds (cdr bounds) (point-min)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3660 (found (if (>= left right) left))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3661 actual-index new)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3662 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3663 ;; Binary search
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3664 (while (not found)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3665 (goto-char (/ (+ left right) 2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3666 (bibtex-skip-to-valid-entry t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3667 (setq actual-index (bibtex-entry-index))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3668 (cond ((bibtex-lessp index actual-index)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3669 (setq new (bibtex-beginning-of-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3670 (if (equal right new)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3671 (setq found right)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3672 (setq right new)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3673 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3674 (bibtex-end-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3675 (bibtex-skip-to-valid-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3676 (setq new (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3677 (if (equal left new)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3678 (setq found right)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3679 (setq left new))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3680 (goto-char found)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3681 (bibtex-beginning-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3682 (setq actual-index (save-excursion (bibtex-entry-index)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3683 (when (or (not actual-index)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3684 (bibtex-lessp actual-index index))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3685 ;; buffer contains no valid entries or
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3686 ;; greater than last entry --> append
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3687 (bibtex-end-of-entry)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3688 (unless (bobp) (newline (forward-line 2)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3689 (beginning-of-line)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3690 (unless key-exist t)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3691
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3692 (defun bibtex-validate (&optional test-thoroughly)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3693 "Validate if buffer or region is syntactically correct.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3694 Check also for duplicate keys and correct sort order provided
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3695 `bibtex-maintain-sorted-entries' is non-nil.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3696 With optional argument TEST-THOROUGHLY non-nil check also for
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3697 the absence of required fields and for questionable month fields.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3698 If mark is active, validate current region, if not the whole buffer.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3699 Only check known entry types, so you can put comments outside of entries.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3700 Return t if test was successful, nil otherwise."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3701 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3702 (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3703 error-list syntax-error)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3704 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3705 (save-restriction
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3706 (if mark-active (narrow-to-region (region-beginning) (region-end)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3707
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3708 ;; Check syntactical structure of entries
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3709 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3710 (bibtex-progress-message "Checking syntactical structure")
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3711 (let (bounds end)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3712 (while (setq end (re-search-forward "^[ \t]*@" nil t))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3713 (bibtex-progress-message)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3714 (goto-char (match-beginning 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3715 (cond ((setq bounds (bibtex-valid-entry))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3716 (goto-char (cdr bounds)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3717 ((setq bounds (or (bibtex-parse-string)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3718 (bibtex-parse-preamble)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3719 (goto-char (bibtex-end-of-string bounds)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3720 ((looking-at bibtex-any-valid-entry-type)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3721 (push (cons (bibtex-current-line)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3722 "Syntax error (check esp. commas, braces, and quotes)")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3723 error-list)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3724 (goto-char (match-end 0)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3725 (t (goto-char end)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3726 (bibtex-progress-message 'done)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3727
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3728 (if error-list
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3729 ;; Continue only if there were no syntax errors.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3730 (setq syntax-error t)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3731
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3732 ;; Check for duplicate keys and correct sort order
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3733 (bibtex-init-sort-entry-class-alist) ; Needed by `bibtex-lessp'.
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3734 (bibtex-parse-keys) ; Possibly needed by `bibtex-lessp'.
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3735 ; Always needed by subsequent global key check.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3736 (let (previous current key-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3737 (bibtex-progress-message "Checking for duplicate keys")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3738 (bibtex-map-entries
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3739 (lambda (key beg end)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3740 (bibtex-progress-message)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3741 (setq current (bibtex-entry-index))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3742 (cond ((not previous))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3743 ((member key key-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3744 (push (cons (bibtex-current-line)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3745 (format "Duplicate key `%s'" key))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3746 error-list))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3747 ((and bibtex-maintain-sorted-entries
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3748 (not (bibtex-lessp previous current)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3749 (push (cons (bibtex-current-line)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3750 "Entries out of order")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3751 error-list)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3752 (push key key-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3753 (setq previous current)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3754 (bibtex-progress-message 'done))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3755
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3756 ;; Check for duplicate keys in `bibtex-files'.
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3757 ;; `bibtex-validate' only compares keys in current buffer with keys
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3758 ;; in `bibtex-files'. `bibtex-validate-globally' compares keys for
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3759 ;; each file in `bibtex-files' with keys of all other files in
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3760 ;; `bibtex-files'.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3761 ;; We don't want to be fooled by outdated `bibtex-reference-keys'.
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3762 (dolist (buffer (bibtex-initialize nil t))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3763 (dolist (key (with-current-buffer buffer bibtex-reference-keys))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3764 (when (and (cdr key)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3765 (cdr (assoc-string (car key) bibtex-reference-keys)))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3766 (bibtex-search-entry (car key))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3767 (push (cons (bibtex-current-line)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3768 (format "Duplicate key `%s' in %s" (car key)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3769 (abbreviate-file-name (buffer-file-name buffer))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3770 error-list))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3771
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3772 (when test-thoroughly
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3773 (bibtex-progress-message
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3774 "Checking required fields and month fields")
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3775 (let ((bibtex-sort-ignore-string-entries t))
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
3776 (bibtex-map-entries
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3777 (lambda (key beg end)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3778 (bibtex-progress-message)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3779 (let* ((entry-list (assoc-string (bibtex-type-in-head)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3780 bibtex-entry-field-alist t))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3781 (req (copy-sequence (elt (elt entry-list 1) 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3782 (creq (copy-sequence (elt (elt entry-list 2) 0)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3783 crossref-there bounds alt-there field)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3784 (bibtex-beginning-first-field beg)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3785 (while (setq bounds (bibtex-parse-field))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3786 (let ((field-name (bibtex-name-in-field bounds)))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3787 (if (and (bibtex-string= field-name "month")
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3788 ;; Check only abbreviated month fields.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3789 (let ((month (bibtex-text-in-field-bounds bounds)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3790 (not (or (string-match "\\`[\"{].+[\"}]\\'" month)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3791 (assoc-string
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3792 month
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3793 bibtex-predefined-month-strings t)))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3794 (push (cons (bibtex-current-line)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3795 "Questionable month field")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3796 error-list))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3797 (setq field (assoc-string field-name req t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3798 req (delete field req)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3799 creq (delete (assoc-string field-name creq t) creq))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3800 (if (nth 3 field)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3801 (if alt-there
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3802 (push (cons (bibtex-current-line)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3803 "More than one non-empty alternative")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3804 error-list)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3805 (setq alt-there t)))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
3806 (if (bibtex-string= field-name "crossref")
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3807 (setq crossref-there t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3808 (goto-char (bibtex-end-of-field bounds)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3809 (if crossref-there (setq req creq))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3810 (let (alt)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3811 (dolist (field req)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3812 (if (nth 3 field)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3813 (push (car field) alt)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3814 (push (cons (save-excursion (goto-char beg)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3815 (bibtex-current-line))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3816 (format "Required field `%s' missing"
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3817 (car field)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3818 error-list)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3819 ;; The following fails if there are more than two
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3820 ;; alternatives in a BibTeX entry, which isn't
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3821 ;; the case momentarily.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3822 (if (cdr alt)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3823 (push (cons (save-excursion (goto-char beg)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3824 (bibtex-current-line))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3825 (format "Alternative fields `%s'/`%s' missing"
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3826 (car alt) (cadr alt)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3827 error-list)))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3828 (bibtex-progress-message 'done)))))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3829
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3830 (if error-list
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3831 (let ((file (file-name-nondirectory (buffer-file-name)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3832 (dir default-directory)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3833 (err-buf "*BibTeX validation errors*"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3834 (setq error-list (sort error-list 'car-less-than-car))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3835 (with-current-buffer (get-buffer-create err-buf)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3836 (setq default-directory dir)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3837 (unless (eq major-mode 'compilation-mode) (compilation-mode))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3838 (toggle-read-only -1)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3839 (delete-region (point-min) (point-max))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3840 (insert "BibTeX mode command `bibtex-validate'\n"
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3841 (if syntax-error
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
3842 "Maybe undetected errors due to syntax errors. Correct and validate again.\n"
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3843 "\n"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3844 (dolist (err error-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3845 (insert (format "%s:%d: %s\n" file (car err) (cdr err))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3846 (set-buffer-modified-p nil)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3847 (toggle-read-only 1)
104774
468b7fa34d2c Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102868
diff changeset
3848 (goto-char (point-min))
468b7fa34d2c Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102868
diff changeset
3849 (forward-line 2)) ; first error message
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3850 (display-buffer err-buf)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3851 nil) ; return `nil' (i.e., buffer is invalid)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3852 (message "%s is syntactically correct"
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3853 (if mark-active "Region" "Buffer"))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3854 t))) ; return `t' (i.e., buffer is valid)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3855
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3856 (defun bibtex-validate-globally (&optional strings)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3857 "Check for duplicate keys in `bibtex-files'.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3858 With optional prefix arg STRINGS, check for duplicate strings, too.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3859 Return t if test was successful, nil otherwise."
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3860 (interactive "P")
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
3861 (let ((buffer-list (bibtex-initialize t))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3862 buffer-key-list current-buf current-keys error-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3863 ;; Check for duplicate keys within BibTeX buffer
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3864 (dolist (buffer buffer-list)
105813
df4934f25eef * textmodes/two-column.el (2C-split):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105601
diff changeset
3865 (with-current-buffer buffer
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3866 (let (entry-type key key-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3867 (goto-char (point-min))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3868 (while (re-search-forward bibtex-entry-head nil t)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3869 (setq entry-type (bibtex-type-in-head)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3870 key (bibtex-key-in-head))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3871 (if (or (and strings (bibtex-string= entry-type "string"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3872 (assoc-string entry-type bibtex-entry-field-alist t))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3873 (if (member key key-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3874 (push (format "%s:%d: Duplicate key `%s'\n"
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3875 (buffer-file-name)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3876 (bibtex-current-line) key)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3877 error-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3878 (push key key-list))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3879 (push (cons buffer key-list) buffer-key-list))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3880
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3881 ;; Check for duplicate keys among BibTeX buffers
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3882 (while (setq current-buf (pop buffer-list))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3883 (setq current-keys (cdr (assq current-buf buffer-key-list)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3884 (with-current-buffer current-buf
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3885 (dolist (buffer buffer-list)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3886 (dolist (key (cdr (assq buffer buffer-key-list)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3887 (when (assoc-string key current-keys)
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
3888 (bibtex-search-entry key)
68065
0624a54493b5 (bibtex-validate-globally): Fix typo in a message text:
Eli Zaretskii <eliz@gnu.org>
parents: 67933
diff changeset
3889 (push (format "%s:%d: Duplicate key `%s' in %s\n"
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3890 (buffer-file-name) (bibtex-current-line) key
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3891 (abbreviate-file-name (buffer-file-name buffer)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3892 error-list))))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3893
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3894 ;; Process error list
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3895 (if error-list
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3896 (let ((err-buf "*BibTeX validation errors*"))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3897 (with-current-buffer (get-buffer-create err-buf)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3898 (unless (eq major-mode 'compilation-mode) (compilation-mode))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3899 (toggle-read-only -1)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3900 (delete-region (point-min) (point-max))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3901 (insert "BibTeX mode command `bibtex-validate-globally'\n\n")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3902 (dolist (err (sort error-list 'string-lessp)) (insert err))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3903 (set-buffer-modified-p nil)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3904 (toggle-read-only 1)
104774
468b7fa34d2c Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102868
diff changeset
3905 (goto-char (point-min))
468b7fa34d2c Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102868
diff changeset
3906 (forward-line 2)) ; first error message
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3907 (display-buffer err-buf)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3908 nil) ; return `nil' (i.e., buffer is invalid)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
3909 (message "No duplicate keys.")
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3910 t))) ; return `t' (i.e., buffer is valid)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3911
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3912 (defun bibtex-next-field (begin &optional comma)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3913 "Move point to end of text of next BibTeX field or entry head.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3914 With prefix BEGIN non-nil, move point to its beginning. Optional arg COMMA
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3915 is as in `bibtex-enclosing-field'. It is t for interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3916 (interactive (list current-prefix-arg t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3917 (let ((bounds (bibtex-find-text-internal t nil comma))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3918 end-of-entry)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3919 (if (not bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3920 (setq end-of-entry t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3921 (goto-char (nth 3 bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3922 (if (assoc-string (car bounds) '("@String" "@Preamble") t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3923 (setq end-of-entry t)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3924 ;; BibTeX key or field
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3925 (if (looking-at ",[ \t\n]*") (goto-char (match-end 0)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3926 ;; end of entry
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3927 (if (looking-at "[)}][ \t\n]*") (setq end-of-entry t))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3928 (if (and end-of-entry
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3929 (re-search-forward bibtex-any-entry-maybe-empty-head nil t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3930 (goto-char (match-beginning 0)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3931 (bibtex-find-text begin nil bibtex-help-message)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3932
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3933 (defun bibtex-find-text (&optional begin noerror help comma)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3934 "Move point to end of text of current BibTeX field or entry head.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3935 With optional prefix BEGIN non-nil, move point to its beginning.
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3936 Unless NOERROR is non-nil, an error is signaled if point is not
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3937 on a BibTeX field. If optional arg HELP is non-nil print help message.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3938 When called interactively, the value of HELP is `bibtex-help-message'.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3939 Optional arg COMMA is as in `bibtex-enclosing-field'. It is t for
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3940 interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3941 (interactive (list current-prefix-arg nil bibtex-help-message t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3942 (let ((bounds (bibtex-find-text-internal t nil comma)))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3943 (cond (bounds
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3944 (if begin
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3945 (progn (goto-char (nth 1 bounds))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3946 (if (looking-at "[{\"]")
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3947 (forward-char)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3948 (goto-char (nth 2 bounds))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3949 (if (memq (preceding-char) '(?} ?\"))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
3950 (forward-char -1)))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3951 (if help (bibtex-print-help-message (car bounds))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3952 ((not noerror) (error "Not on BibTeX field")))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3953
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3954 (defun bibtex-find-text-internal (&optional noerror subfield comma)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3955 "Find text part of current BibTeX field or entry head.
92218
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3956 Return list (NAME START-TEXT END-TEXT END STRING-CONST) with field name
1d8a03656f39 (bibtex-format-entry): Handle error message refering to a missing
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 92217
diff changeset
3957 or entry type, start and end of text, and end of field or entry head.
69886
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
3958 STRING-CONST is a flag which is non-nil if current subfield delimited by #
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
3959 is a BibTeX string constant. Return value is nil if field or entry head
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
3960 are not found.
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
3961 If optional arg NOERROR is non-nil, an error message is suppressed
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
3962 if text is not found. If optional arg SUBFIELD is non-nil START-TEXT
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
3963 and END-TEXT correspond to the current subfield delimited by #.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3964 Optional arg COMMA is as in `bibtex-enclosing-field'."
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3965 (save-excursion
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3966 (let ((pnt (point))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3967 (bounds (bibtex-enclosing-field comma t))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3968 (case-fold-search t)
69886
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
3969 name start-text end-text end failure done no-sub string-const)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3970 (bibtex-beginning-of-entry)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3971 (cond (bounds
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3972 (setq name (bibtex-name-in-field bounds t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3973 start-text (bibtex-start-of-text-in-field bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3974 end-text (bibtex-end-of-text-in-field bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3975 end (bibtex-end-of-field bounds)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3976 ;; @String
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3977 ((setq bounds (bibtex-parse-string t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3978 (if (<= pnt (bibtex-end-of-string bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3979 (setq name "@String" ;; not a field name!
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3980 start-text (bibtex-start-of-text-in-string bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3981 end-text (bibtex-end-of-text-in-string bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3982 end (bibtex-end-of-string bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3983 (setq failure t)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
3984 ;; @Preamble
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3985 ((setq bounds (bibtex-parse-preamble))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3986 (if (<= pnt (bibtex-end-of-string bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3987 (setq name "@Preamble" ;; not a field name!
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3988 start-text (bibtex-start-of-text-in-string bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3989 end-text (bibtex-end-of-text-in-string bounds)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3990 end (bibtex-end-of-string bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3991 (setq failure t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3992 ;; BibTeX head
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3993 ((looking-at bibtex-entry-maybe-empty-head)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3994 (goto-char (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3995 (if comma (save-match-data
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3996 (re-search-forward "\\=[ \t\n]*," nil t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3997 (if (<= pnt (point))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3998 (setq name (match-string-no-properties bibtex-type-in-head)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
3999 start-text (or (match-beginning bibtex-key-in-head)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4000 (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4001 end-text (or (match-end bibtex-key-in-head)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4002 (match-end 0))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4003 end end-text
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4004 no-sub t) ; subfields do not make sense
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4005 (setq failure t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4006 (t (setq failure t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4007 (when (and subfield (not failure))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4008 (setq failure no-sub)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4009 (unless failure
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4010 (goto-char start-text)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4011 (while (not done)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4012 (if (or (prog1 (looking-at bibtex-field-const)
69886
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4013 (setq end-text (match-end 0)
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4014 string-const t))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4015 (prog1 (setq bounds (bibtex-parse-field-string))
69886
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4016 (setq end-text (cdr bounds)
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4017 string-const nil)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4018 (progn
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4019 (if (and (<= start-text pnt) (<= pnt end-text))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4020 (setq done t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4021 (goto-char end-text))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4022 (if (looking-at "[ \t\n]*#[ \t\n]*")
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4023 (setq start-text (goto-char (match-end 0)))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4024 (setq done t failure t)))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4025 (cond ((not failure)
69886
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4026 (list name start-text end-text end string-const))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4027 ((and no-sub (not noerror))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4028 (error "Not on text part of BibTeX field"))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4029 ((not noerror) (error "Not on BibTeX field"))))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4030
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4031 (defun bibtex-remove-OPT-or-ALT (&optional comma)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4032 "Remove the string starting optional/alternative fields.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4033 Align text and go thereafter to end of text. Optional arg COMMA
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4034 is as in `bibtex-enclosing-field'. It is t for interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4035 (interactive (list t))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4036 (let ((case-fold-search t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4037 (bounds (bibtex-enclosing-field comma)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4038 (save-excursion
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
4039 (goto-char (bibtex-start-of-name-in-field bounds))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4040 (when (looking-at "OPT\\|ALT")
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4041 (delete-region (match-beginning 0) (match-end 0))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4042 ;; make field non-OPT
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4043 (search-forward "=")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4044 (forward-char -1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4045 (delete-horizontal-space)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4046 (if bibtex-align-at-equal-sign
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4047 (indent-to-column (- bibtex-text-indentation 2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4048 (insert " "))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4049 (search-forward "=")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4050 (delete-horizontal-space)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4051 (if bibtex-align-at-equal-sign
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4052 (insert " ")
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4053 (indent-to-column bibtex-text-indentation))))))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4054
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4055 (defun bibtex-remove-delimiters (&optional comma)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4056 "Remove \"\" or {} around current BibTeX field text.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4057 Optional arg COMMA is as in `bibtex-enclosing-field'. It is t for
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4058 interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4059 (interactive (list t))
69886
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4060 (let ((bounds (bibtex-find-text-internal nil t comma)))
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4061 (unless (nth 4 bounds)
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4062 (delete-region (1- (nth 2 bounds)) (nth 2 bounds))
0da18bcb2c37 (bibtex-find-text-internal): Add new element string-const to return value.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 69581
diff changeset
4063 (delete-region (nth 1 bounds) (1+ (nth 1 bounds))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4064
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4065 (defun bibtex-kill-field (&optional copy-only comma)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4066 "Kill the entire enclosing BibTeX field.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4067 With prefix arg COPY-ONLY, copy the current field to `bibtex-field-kill-ring',
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4068 but do not actually kill it. Optional arg COMMA is as in
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4069 `bibtex-enclosing-field'. It is t for interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4070 (interactive (list current-prefix-arg t))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4071 (save-excursion
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
4072 (let* ((case-fold-search t)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4073 (bounds (bibtex-enclosing-field comma))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4074 (end (bibtex-end-of-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4075 (beg (bibtex-start-of-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4076 (goto-char end)
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4077 ;; Preserve white space at end of BibTeX entry
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4078 (if (looking-at "[ \t\n]*[)}]")
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4079 (progn (skip-chars-backward " \t\n")
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4080 (setq end (point)))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4081 (skip-chars-forward ","))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4082 (push (list (bibtex-name-in-field bounds) nil
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4083 (bibtex-text-in-field-bounds bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4084 bibtex-field-kill-ring)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4085 (if (> (length bibtex-field-kill-ring) bibtex-field-kill-ring-max)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4086 (setcdr (nthcdr (1- bibtex-field-kill-ring-max)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4087 bibtex-field-kill-ring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4088 nil))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4089 (setq bibtex-field-kill-ring-yank-pointer bibtex-field-kill-ring)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4090 (unless copy-only
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4091 (delete-region beg end))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4092 (setq bibtex-last-kill-command 'field))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4093
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4094 (defun bibtex-copy-field-as-kill (&optional comma)
101166
bd632099967a (bibtex-copy-field-as-kill): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
4095 "Copy the BibTeX field at point to `bibtex-field-kill-ring'.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4096 Optional arg COMMA is as in `bibtex-enclosing-field'. It is t for
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4097 interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4098 (interactive (list t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4099 (bibtex-kill-field t comma))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4100
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4101 (defun bibtex-kill-entry (&optional copy-only)
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
4102 "Kill the entire enclosing BibTeX entry.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4103 With prefix arg COPY-ONLY, copy the current entry to `bibtex-entry-kill-ring',
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4104 but do not actually kill it."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4105 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4106 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4107 (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4108 (beg (bibtex-beginning-of-entry))
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4109 (key (progn (looking-at bibtex-any-entry-maybe-empty-head)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4110 (bibtex-key-in-head)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4111 (end (progn (bibtex-end-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4112 (if (re-search-forward
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4113 bibtex-any-entry-maybe-empty-head nil 'move)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4114 (goto-char (match-beginning 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4115 (point))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4116 (push (buffer-substring-no-properties beg end)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4117 bibtex-entry-kill-ring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4118 (if (> (length bibtex-entry-kill-ring) bibtex-entry-kill-ring-max)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4119 (setcdr (nthcdr (1- bibtex-entry-kill-ring-max)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4120 bibtex-entry-kill-ring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4121 nil))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4122 (setq bibtex-entry-kill-ring-yank-pointer bibtex-entry-kill-ring)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4123 (unless copy-only
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4124 (delete-region beg end)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4125 ;; remove key from `bibtex-reference-keys'.
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4126 (unless (functionp bibtex-reference-keys)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4127 (setq bibtex-reference-keys
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4128 (delete (cons key t) bibtex-reference-keys))))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4129 (setq bibtex-last-kill-command 'entry))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4130
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4131 (defun bibtex-copy-entry-as-kill ()
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4132 "Copy the entire enclosing BibTeX entry to `bibtex-entry-kill-ring'."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4133 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4134 (bibtex-kill-entry t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4135
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4136 (defun bibtex-yank (&optional n)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4137 "Reinsert the last BibTeX item.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4138 More precisely, reinsert the field or entry killed or yanked most recently.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4139 With argument N, reinsert the Nth most recently killed BibTeX item.
62077
e233a73cbf79 (bibtex-summary): Use current BibTeX entry to avoid calling
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61439
diff changeset
4140 See also the command \\[bibtex-yank-pop]."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4141 (interactive "*p")
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4142 (bibtex-insert-kill (1- n) t)
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4143 (setq this-command 'bibtex-yank))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4144
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4145 (defun bibtex-yank-pop (n)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4146 "Replace just-yanked killed BibTeX item with a different item.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4147 This command is allowed only immediately after a `bibtex-yank' or a
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4148 `bibtex-yank-pop'. In this case, the region contains a reinserted
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4149 previously killed BibTeX item. `bibtex-yank-pop' deletes that item
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4150 and inserts in its place a different killed BibTeX item.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4151
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4152 With no argument, the previous kill is inserted.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4153 With argument N, insert the Nth previous kill.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4154 If N is negative, this is a more recent kill.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4155
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4156 The sequence of kills wraps around, so that after the oldest one
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4157 comes the newest one."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4158 (interactive "*p")
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4159 (unless (eq last-command 'bibtex-yank)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4160 (error "Previous command was not a BibTeX yank"))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4161 (setq this-command 'bibtex-yank)
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4162 (let ((inhibit-read-only t) key)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4163 ;; point is at end of yanked entry
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4164 (unless (functionp bibtex-reference-keys)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4165 ;; remove key of yanked entry from `bibtex-reference-keys'
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4166 (save-excursion
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4167 (goto-char (mark t))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4168 (if (and (looking-at bibtex-any-entry-maybe-empty-head)
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4169 (setq key (bibtex-key-in-head)))
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4170 (setq bibtex-reference-keys
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4171 (delete (cons key t) bibtex-reference-keys)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4172 (delete-region (point) (mark t))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4173 (bibtex-insert-kill n t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4174
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4175 (defun bibtex-empty-field (&optional comma)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4176 "Delete the text part of the current field, replace with empty text.
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4177 Optional arg COMMA is as in `bibtex-enclosing-field'. It is t for
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4178 interactive calls."
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4179 (interactive (list t))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4180 (let ((bounds (bibtex-enclosing-field comma)))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
4181 (goto-char (bibtex-start-of-text-in-field bounds))
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
4182 (delete-region (point) (bibtex-end-of-text-in-field bounds))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4183 (insert (bibtex-field-left-delimiter)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4184 (bibtex-field-right-delimiter))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4185 (bibtex-find-text t nil bibtex-help-message)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4186
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
4187 (defun bibtex-pop-previous (arg)
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
4188 "Replace text of current field with the similar field in previous entry.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4189 With arg, goes up ARG entries. Repeated, goes up so many times. May be
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
4190 intermixed with \\[bibtex-pop-next] (bibtex-pop-next)."
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
4191 (interactive "p")
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
4192 (bibtex-pop arg 'previous))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4193
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4194 (defun bibtex-pop-next (arg)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4195 "Replace text of current field with the text of similar field in next entry.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4196 With arg, goes down ARG entries. Repeated, goes down so many times. May be
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4197 intermixed with \\[bibtex-pop-previous] (bibtex-pop-previous)."
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4198 (interactive "p")
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
4199 (bibtex-pop arg 'next))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4200
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4201 (defun bibtex-clean-entry (&optional new-key called-by-reformat)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4202 "Finish editing the current BibTeX entry and clean it up.
97521
c383ec0fd021 (bibtex-entry-format): Mark as safe.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 94670
diff changeset
4203 Check that no required fields are empty and format entry dependent
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4204 on the value of `bibtex-entry-format'.
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
4205 If the reference key of the entry is empty or a prefix argument is given,
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
4206 calculate a new reference key. (Note: this works only if fields in entry
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4207 begin on separate lines prior to calling `bibtex-clean-entry' or if
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4208 'realign is contained in `bibtex-entry-format'.)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4209 Don't call `bibtex-clean-entry' on @Preamble entries.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4210 At end of the cleaning process, the functions in
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4211 `bibtex-clean-entry-hook' are called with region narrowed to entry."
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4212 ;; Opt. arg CALLED-BY-REFORMAT is t if `bibtex-clean-entry'
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4213 ;; is called by `bibtex-reformat'
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4214 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4215 (let ((case-fold-search t)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4216 (start (bibtex-beginning-of-entry))
70841
2a874a2efaf4 (bibtex-format-entry, bibtex-clean-entry):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70837
diff changeset
4217 (_ (or (looking-at bibtex-any-entry-maybe-empty-head)
2a874a2efaf4 (bibtex-format-entry, bibtex-clean-entry):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70837
diff changeset
4218 (error "Not inside a BibTeX entry")))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4219 (entry-type (bibtex-type-in-head))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4220 (key (bibtex-key-in-head)))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4221 (cond ((bibtex-string= entry-type "preamble")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4222 ;; (bibtex-format-preamble)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4223 (error "No clean up of @Preamble entries"))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4224 ((bibtex-string= entry-type "string")
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4225 (setq entry-type 'string))
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4226 ;; (bibtex-format-string)
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4227 (t (bibtex-format-entry)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4228 ;; set key
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4229 (when (or new-key (not key))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4230 (setq key (bibtex-generate-autokey))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4231 ;; Sometimes `bibtex-generate-autokey' returns an empty string
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4232 (if (or bibtex-autokey-edit-before-use (string= "" key))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4233 (setq key (if (eq entry-type 'string)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4234 (bibtex-read-string-key key)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4235 (bibtex-read-key "Key to use: " key))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4236 (save-excursion
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4237 (re-search-forward (if (eq entry-type 'string)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4238 bibtex-string-maybe-empty-head
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4239 bibtex-entry-maybe-empty-head))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4240 (if (match-beginning bibtex-key-in-head)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4241 (delete-region (match-beginning bibtex-key-in-head)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4242 (match-end bibtex-key-in-head)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4243 (insert key)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4244
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4245 (unless called-by-reformat
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4246 (let* ((end (save-excursion
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4247 (bibtex-end-of-entry)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4248 (if (re-search-forward
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4249 bibtex-entry-maybe-empty-head nil 'move)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4250 (goto-char (match-beginning 0)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4251 (point)))
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4252 (entry (buffer-substring start end))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4253 ;; include the crossref key in index
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4254 (index (let ((bibtex-maintain-sorted-entries 'crossref))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4255 (bibtex-entry-index))) ; moves point to end of head
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4256 error)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4257 ;; sorting
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4258 (if (and bibtex-maintain-sorted-entries
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4259 (not (and bibtex-sort-ignore-string-entries
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4260 (eq entry-type 'string))))
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4261 (progn
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4262 (delete-region start end)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4263 (setq error (not (bibtex-prepare-new-entry index))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4264 start (point)) ; update start
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4265 (save-excursion (insert entry)))
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4266 (bibtex-search-entry key)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4267 (setq error (or (/= (point) start)
91913
ec78aa675c78 (bibtex-search-entry): Rename from bibtex-find-entry.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87650
diff changeset
4268 (bibtex-search-entry key nil end))))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4269 (if error
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4270 (error "New inserted entry yields duplicate key"))
87650
29fbecdf9527 (bibtex-initialize): New autoloaded command. Rename from function
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 87649
diff changeset
4271 (dolist (buffer (bibtex-initialize))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4272 (with-current-buffer buffer
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4273 (if (cdr (assoc-string key bibtex-reference-keys))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4274 (error "Duplicate key in %s" (buffer-file-name)))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4275
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4276 ;; Only update `bibtex-strings' and `bibtex-reference-keys'
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4277 ;; if they have been built already.
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4278 (cond ((eq entry-type 'string)
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4279 ;; We have a @String entry.
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4280 (unless (or (functionp bibtex-strings)
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4281 (assoc key bibtex-strings))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4282 (push (cons key (bibtex-text-in-string
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4283 (bibtex-parse-string) t))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4284 bibtex-strings)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4285 ;; We have a normal entry.
102038
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4286 ((not (functionp bibtex-reference-keys))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4287 (let ((found (assoc key bibtex-reference-keys)))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4288 (cond ((not found)
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4289 (push (cons key t) bibtex-reference-keys))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4290 ((not (cdr found))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4291 ;; Turn a crossref key into a header key
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4292 (setq bibtex-reference-keys
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4293 (cons (cons key t)
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4294 (delete (list key) bibtex-reference-keys))))))
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4295 ;; If entry has a crossref key, it goes into the list
b91b8e9fcb55 (bibtex-global-key-alist, bibtex-initialize): Exclude current buffer
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 101248
diff changeset
4296 ;; `bibtex-reference-keys', too.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4297 (if (and (nth 1 index)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4298 (not (assoc (nth 1 index) bibtex-reference-keys)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4299 (push (list (nth 1 index)) bibtex-reference-keys)))))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4300
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4301 ;; final clean up
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4302 (if bibtex-clean-entry-hook
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4303 (save-excursion
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4304 (save-restriction
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4305 (bibtex-narrow-to-entry)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4306 (run-hooks 'bibtex-clean-entry-hook)))))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4307
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4308 (defun bibtex-fill-field-bounds (bounds justify &optional move)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4309 "Fill BibTeX field delimited by BOUNDS.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4310 If JUSTIFY is non-nil justify as well.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4311 If optional arg MOVE is non-nil move point to end of field."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4312 (let ((end-field (copy-marker (bibtex-end-of-field bounds))))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4313 (if (not justify)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4314 (goto-char (bibtex-start-of-text-in-field bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4315 (goto-char (bibtex-start-of-field bounds))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4316 (forward-char) ; leading comma
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4317 (bibtex-delete-whitespace)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4318 (open-line 1)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4319 (forward-char)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4320 (indent-to-column (+ bibtex-entry-offset
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4321 bibtex-field-indentation))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4322 (re-search-forward "[ \t\n]*=" end-field)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4323 (replace-match "=")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4324 (forward-char -1)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4325 (if bibtex-align-at-equal-sign
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4326 (indent-to-column
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4327 (+ bibtex-entry-offset (- bibtex-text-indentation 2)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4328 (insert " "))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4329 (forward-char)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4330 (bibtex-delete-whitespace)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4331 (if bibtex-align-at-equal-sign
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4332 (insert " ")
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4333 (indent-to-column bibtex-text-indentation)))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4334 ;; Paragraphs within fields are not preserved. Bother?
65776
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
4335 (fill-region-as-paragraph (line-beginning-position) end-field
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
4336 default-justification nil (point))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4337 (if move (goto-char end-field))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4338
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4339 (defun bibtex-fill-field (&optional justify)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4340 "Like \\[fill-paragraph], but fill current BibTeX field.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4341 If optional prefix JUSTIFY is non-nil justify as well.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4342 In BibTeX mode this function is bound to `fill-paragraph-function'."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4343 (interactive "*P")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4344 (let ((pnt (copy-marker (point)))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4345 (bounds (bibtex-enclosing-field t)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4346 (bibtex-fill-field-bounds bounds justify)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4347 (goto-char pnt)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4348
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4349 (defun bibtex-fill-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4350 "Fill current BibTeX entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4351 Realign entry, so that every field starts on a separate line. Field
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
4352 names appear in column `bibtex-field-indentation', field text starts in
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4353 column `bibtex-text-indentation' and continuation lines start here, too.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4354 If `bibtex-align-at-equal-sign' is non-nil, align equal signs, too."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4355 (interactive "*")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4356 (let ((pnt (copy-marker (point)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4357 (end (copy-marker (bibtex-end-of-entry)))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4358 (beg (bibtex-beginning-of-entry)) ; move point
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4359 bounds)
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
4360 (bibtex-delete-whitespace)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4361 (indent-to-column bibtex-entry-offset)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4362 (bibtex-beginning-first-field beg)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4363 (while (setq bounds (bibtex-parse-field))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4364 (bibtex-fill-field-bounds bounds t t))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4365 (if (looking-at ",")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4366 (forward-char))
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4367 (skip-chars-backward " \t\n")
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
4368 (bibtex-delete-whitespace)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4369 (open-line 1)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4370 (forward-char)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4371 (indent-to-column bibtex-entry-offset)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4372 (goto-char pnt)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4373
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4374 (defun bibtex-realign ()
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4375 "Realign BibTeX entries such that they are separated by one blank line."
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4376 (goto-char (point-min))
65776
a2bc28552d90 2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Romain Francoise <romain@orebokech.com>
parents: 65583
diff changeset
4377 (let ((case-fold-search t)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4378 (entry-type (concat "[ \t\n]*\\(" bibtex-entry-type "\\)")))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4379 ;; No blank lines prior to the first entry if there no
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4380 ;; non-white characters in front of it.
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4381 (when (looking-at entry-type)
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4382 (replace-match "\\1"))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4383 ;; Entries are separated by one blank line.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4384 (while (re-search-forward entry-type nil t)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4385 (replace-match "\n\n\\1"))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4386 ;; One blank line past the last entry if it is followed by
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4387 ;; non-white characters, no blank line otherwise.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4388 (beginning-of-line)
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4389 (when (re-search-forward bibtex-entry-type nil t)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4390 (bibtex-end-of-entry)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4391 (bibtex-delete-whitespace)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4392 (open-line (if (eobp) 1 2)))))
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4393
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4394 (defun bibtex-reformat (&optional read-options)
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
4395 "Reformat all BibTeX entries in buffer or region.
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4396 Without prefix argument, reformatting is based on `bibtex-entry-format'.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
4397 With prefix argument, read options for reformatting from minibuffer.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4398 With \\[universal-argument] \\[universal-argument] prefix argument, reuse previous answers (if any) again.
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4399 If mark is active reformat entries in region, if not in whole buffer."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4400 (interactive "*P")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4401 (let* ((pnt (point))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4402 (use-previous-options
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4403 (and (equal (prefix-numeric-value read-options) 16)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4404 (or bibtex-reformat-previous-options
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
4405 bibtex-reformat-previous-reference-keys)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4406 (bibtex-entry-format
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4407 (cond (read-options
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4408 (if use-previous-options
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4409 bibtex-reformat-previous-options
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4410 (setq bibtex-reformat-previous-options
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4411 (mapcar (lambda (option)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4412 (if (y-or-n-p (car option)) (cdr option)))
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4413 `(("Realign entries (recommended)? " . 'realign)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4414 ("Remove empty optional and alternative fields? " . 'opts-or-alts)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4415 ("Remove delimiters around pure numerical fields? " . 'numerical-fields)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4416 (,(concat (if bibtex-comma-after-last-field "Insert" "Remove")
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4417 " comma at end of entry? ") . 'last-comma)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4418 ("Replace double page dashes by single ones? " . 'page-dashes)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4419 ("Delete whitespace at the beginning and end of fields? " . 'whitespace)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4420 ("Inherit booktitle? " . 'inherit-booktitle)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4421 ("Force delimiters? " . 'delimiters)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4422 ("Unify case of entry types and field names? " . 'unify-case)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4423 ("Enclose parts of field entries by braces? " . 'braces)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4424 ("Replace parts of field entries by string constants? " . 'strings))))))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4425 ;; Do not include required-fields because `bibtex-reformat'
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4426 ;; cannot handle the error messages of `bibtex-format-entry'.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4427 ;; Use `bibtex-validate' to check for required fields.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4428 ((eq t bibtex-entry-format)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4429 '(realign opts-or-alts numerical-fields delimiters
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4430 last-comma page-dashes unify-case inherit-booktitle
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4431 whitespace braces strings))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4432 (t
106426
9e50cc22823c (bibtex-map-entries): Use marker to keep
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 106385
diff changeset
4433 (cons 'realign (remove 'required-fields bibtex-entry-format)))))
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4434 (reformat-reference-keys
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4435 (if read-options
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4436 (if use-previous-options
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4437 bibtex-reformat-previous-reference-keys
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4438 (setq bibtex-reformat-previous-reference-keys
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4439 (y-or-n-p "Generate new reference keys automatically? ")))))
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4440 (bibtex-sort-ignore-string-entries t)
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4441 bibtex-autokey-edit-before-use)
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4442
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4443 (save-restriction
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4444 (if mark-active (narrow-to-region (region-beginning) (region-end)))
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4445 (if (memq 'realign bibtex-entry-format)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4446 (bibtex-realign))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4447 (bibtex-progress-message "Formatting" 1)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4448 (bibtex-map-entries (lambda (key beg end)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4449 (bibtex-progress-message)
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4450 (bibtex-clean-entry reformat-reference-keys t)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4451 (bibtex-progress-message 'done))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4452 (when reformat-reference-keys
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4453 (kill-local-variable 'bibtex-reference-keys)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4454 (when bibtex-maintain-sorted-entries
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4455 (bibtex-progress-message "Sorting" 1)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4456 (bibtex-sort-buffer)
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4457 (bibtex-progress-message 'done)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4458 (goto-char pnt)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4459
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4460 (defun bibtex-convert-alien (&optional read-options)
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
4461 "Make an alien BibTeX buffer fully usable by BibTeX mode.
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4462 If a file does not conform with all standards used by BibTeX mode,
58772
4de7ab2c086e (bibtex-font-lock-url-regexp):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58556
diff changeset
4463 some of the high-level features of BibTeX mode are not available.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4464 This function tries to convert current buffer to conform with these standards.
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4465 With prefix argument READ-OPTIONS non-nil, read options for reformatting
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4466 entries from minibuffer."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4467 (interactive "*P")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4468 (message "Starting to validate buffer...")
91992
d490a1f4c1b9 (bibtex-convert-alien): Do not use optional args in calls of sit-for.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 91913
diff changeset
4469 (sit-for 1)
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4470 (bibtex-realign)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4471 (deactivate-mark) ; So `bibtex-validate' works on the whole buffer.
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4472 (if (not (let (bibtex-maintain-sorted-entries)
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4473 (bibtex-validate)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4474 (message "Correct errors and call `bibtex-convert-alien' again")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4475 (message "Starting to reformat entries...")
91992
d490a1f4c1b9 (bibtex-convert-alien): Do not use optional args in calls of sit-for.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 91913
diff changeset
4476 (sit-for 2)
55312
3b7a4fa9b2d8 (bibtex-sort-buffer): Remove error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52891
diff changeset
4477 (bibtex-reformat read-options)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4478 (goto-char (point-max))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4479 (message "Buffer is now parsable. Please save it.")))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4480
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4481 (defun bibtex-complete ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4482 "Complete word fragment before point according to context.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4483 If point is inside key or crossref field perform key completion based on
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4484 `bibtex-reference-keys'. Inside a month field perform key completion
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4485 based on `bibtex-predefined-month-strings'. Inside any other field
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4486 \(including a String or Preamble definition) perform string completion
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4487 based on `bibtex-strings'.
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4488 An error is signaled if point is outside key or BibTeX field."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4489 (interactive)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4490 (let ((pnt (point))
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4491 (case-fold-search t)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4492 bounds name compl)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4493 (save-excursion
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4494 (if (and (setq bounds (bibtex-enclosing-field nil t))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4495 (>= pnt (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4496 (<= pnt (bibtex-end-of-text-in-field bounds)))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4497 (setq name (bibtex-name-in-field bounds t)
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4498 compl (cond ((bibtex-string= name "crossref")
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4499 ;; point is in crossref field
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4500 'crossref-key)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4501 ((bibtex-string= name "month")
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4502 ;; point is in month field
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4503 bibtex-predefined-month-strings)
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4504 ;; point is in other field
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4505 (t (bibtex-strings))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4506 (bibtex-beginning-of-entry)
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4507 (cond ((setq bounds (bibtex-parse-string t))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4508 ;; point is inside a @String key
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4509 (cond ((and (>= pnt (nth 1 (car bounds)))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4510 (<= pnt (nth 2 (car bounds))))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4511 (setq compl 'string))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4512 ;; point is inside a @String field
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4513 ((and (>= pnt (bibtex-start-of-text-in-string bounds))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4514 (<= pnt (bibtex-end-of-text-in-string bounds)))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4515 (setq compl (bibtex-strings)))))
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4516 ;; point is inside a @Preamble field
67894
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4517 ((setq bounds (bibtex-parse-preamble))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4518 (if (and (>= pnt (bibtex-start-of-text-in-string bounds))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4519 (<= pnt (bibtex-end-of-text-in-string bounds)))
d742983a2136 (bibtex-entry-type-whitespace)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67816
diff changeset
4520 (setq compl (bibtex-strings))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4521 ((and (looking-at bibtex-entry-maybe-empty-head)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4522 ;; point is inside a key
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4523 (or (and (match-beginning bibtex-key-in-head)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4524 (>= pnt (match-beginning bibtex-key-in-head))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4525 (<= pnt (match-end bibtex-key-in-head)))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4526 ;; or point is on empty key
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4527 (and (not (match-beginning bibtex-key-in-head))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4528 (= pnt (match-end 0)))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4529 (setq compl 'key)))))
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4530
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4531 (cond ((eq compl 'key)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4532 ;; key completion: no cleanup needed
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4533 (setq choose-completion-string-functions nil)
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4534 (let (completion-ignore-case)
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4535 (bibtex-complete-internal (bibtex-global-key-alist))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4536
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4537 ((eq compl 'crossref-key)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4538 ;; crossref key completion
67933
679e4542aaa9 (bibtex-mode): Make completion-ignore-case
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67897
diff changeset
4539 ;;
679e4542aaa9 (bibtex-mode): Make completion-ignore-case
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67897
diff changeset
4540 ;; If we quit the *Completions* buffer without requesting
679e4542aaa9 (bibtex-mode): Make completion-ignore-case
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67897
diff changeset
4541 ;; a completion, `choose-completion-string-functions' is still
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4542 ;; non-nil. Therefore, `choose-completion-string-functions' is
67933
679e4542aaa9 (bibtex-mode): Make completion-ignore-case
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67897
diff changeset
4543 ;; always set (either to non-nil or nil) when a new completion
679e4542aaa9 (bibtex-mode): Make completion-ignore-case
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67897
diff changeset
4544 ;; is requested.
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4545 (let (completion-ignore-case)
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4546 (setq choose-completion-string-functions
105601
68686d39c93a Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105372
diff changeset
4547 (lambda (choice buffer base-position &rest ignored)
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4548 (setq choose-completion-string-functions nil)
105601
68686d39c93a Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105372
diff changeset
4549 (choose-completion-string choice buffer base-position)
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4550 (bibtex-complete-crossref-cleanup choice)
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4551 t)) ; needed by choose-completion-string-functions
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4552 (bibtex-complete-crossref-cleanup
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4553 (bibtex-complete-internal (bibtex-global-key-alist)))))
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4554
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4555 ((eq compl 'string)
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4556 ;; string key completion: no cleanup needed
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4557 (setq choose-completion-string-functions nil)
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4558 (let ((completion-ignore-case t))
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4559 (bibtex-complete-internal bibtex-strings)))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4560
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4561 (compl
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4562 ;; string completion
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4563 (let ((completion-ignore-case t))
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4564 (setq choose-completion-string-functions
105601
68686d39c93a Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105372
diff changeset
4565 `(lambda (choice buffer base-position &rest ignored)
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4566 (setq choose-completion-string-functions nil)
105601
68686d39c93a Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105372
diff changeset
4567 (choose-completion-string choice buffer base-position)
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4568 (bibtex-complete-string-cleanup choice ',compl)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4569 t)) ; needed by `choose-completion-string-functions'
69581
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4570 (bibtex-complete-string-cleanup (bibtex-complete-internal compl)
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4571 compl)))
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4572
98eee222dceb * textmodes/bibtex.el (bibtex-include-OPTkey)
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 68648
diff changeset
4573 (t (setq choose-completion-string-functions nil)
67933
679e4542aaa9 (bibtex-mode): Make completion-ignore-case
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 67897
diff changeset
4574 (error "Point outside key or BibTeX field")))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4575
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4576 (defun bibtex-Article ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4577 "Insert a new BibTeX @Article entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4578 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4579 (bibtex-entry "Article"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4580
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4581 (defun bibtex-Book ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4582 "Insert a new BibTeX @Book entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4583 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4584 (bibtex-entry "Book"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4585
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4586 (defun bibtex-Booklet ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4587 "Insert a new BibTeX @Booklet entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4588 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4589 (bibtex-entry "Booklet"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4590
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4591 (defun bibtex-InBook ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4592 "Insert a new BibTeX @InBook entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4593 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4594 (bibtex-entry "InBook"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4595
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4596 (defun bibtex-InCollection ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4597 "Insert a new BibTeX @InCollection entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4598 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4599 (bibtex-entry "InCollection"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4600
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4601 (defun bibtex-InProceedings ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4602 "Insert a new BibTeX @InProceedings entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4603 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4604 (bibtex-entry "InProceedings"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4605
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4606 (defun bibtex-Manual ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4607 "Insert a new BibTeX @Manual entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4608 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4609 (bibtex-entry "Manual"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4610
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4611 (defun bibtex-MastersThesis ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4612 "Insert a new BibTeX @MastersThesis entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4613 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4614 (bibtex-entry "MastersThesis"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4615
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4616 (defun bibtex-Misc ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4617 "Insert a new BibTeX @Misc entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4618 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4619 (bibtex-entry "Misc"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4620
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4621 (defun bibtex-PhdThesis ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4622 "Insert a new BibTeX @PhdThesis entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4623 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4624 (bibtex-entry "PhdThesis"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4625
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4626 (defun bibtex-Proceedings ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4627 "Insert a new BibTeX @Proceedings entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4628 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4629 (bibtex-entry "Proceedings"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4630
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4631 (defun bibtex-TechReport ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4632 "Insert a new BibTeX @TechReport entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4633 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4634 (bibtex-entry "TechReport"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4635
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4636 (defun bibtex-Unpublished ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4637 "Insert a new BibTeX @Unpublished entry; see also `bibtex-entry'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4638 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4639 (bibtex-entry "Unpublished"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4640
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4641 (defun bibtex-String (&optional key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4642 "Insert a new BibTeX @String entry with key KEY."
58556
8ff63943e93e (bibtex-sort-entry-class)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57833
diff changeset
4643 (interactive (list (bibtex-read-string-key)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4644 (let ((bibtex-maintain-sorted-entries
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4645 (unless bibtex-sort-ignore-string-entries
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4646 bibtex-maintain-sorted-entries))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4647 endpos)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4648 (unless (bibtex-prepare-new-entry (list key nil "String"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4649 (error "Entry with key `%s' already exists" key))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4650 (if (zerop (length key)) (setq key nil))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4651 (indent-to-column bibtex-entry-offset)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4652 (insert "@String"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4653 (bibtex-entry-left-delimiter))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4654 (if key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4655 (insert key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4656 (setq endpos (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4657 (insert " = "
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4658 (bibtex-field-left-delimiter))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4659 (if key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4660 (setq endpos (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4661 (insert (bibtex-field-right-delimiter)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4662 (bibtex-entry-right-delimiter)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4663 "\n")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4664 (goto-char endpos)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4665
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4666 (defun bibtex-Preamble ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
4667 "Insert a new BibTeX @Preamble entry."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4668 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4669 (bibtex-move-outside-of-entry)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
4670 (indent-to-column bibtex-entry-offset)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
4671 (insert "@Preamble"
63470
c318ec40e95f (bibtex-Preamble): Enclose BibTeX preamble by field delimiters.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62077
diff changeset
4672 (bibtex-entry-left-delimiter)
c318ec40e95f (bibtex-Preamble): Enclose BibTeX preamble by field delimiters.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62077
diff changeset
4673 (bibtex-field-left-delimiter))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4674 (let ((endpos (point)))
67575
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4675 (insert (bibtex-field-right-delimiter)
d0f7b15488df (bibtex-expand-strings)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66116
diff changeset
4676 (bibtex-entry-right-delimiter)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4677 "\n")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
4678 (goto-char endpos)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4679
70250
5d4423d8a6f5 (bibtex-url): New optional arg no-browse. Return the URL or nil if
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70249
diff changeset
4680 (defun bibtex-url (&optional pos no-browse)
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4681 "Browse a URL for the BibTeX entry at point.
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4682 Optional POS is the location of the BibTeX entry.
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4683 The URL is generated using the schemes defined in `bibtex-generate-url-list'
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4684 \(see there\). If multiple schemes match for this entry, or the same scheme
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4685 matches more than once, use the one for which the first step's match is the
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4686 closest to POS. The URL is passed to `browse-url' unless NO-BROWSE is t.
70250
5d4423d8a6f5 (bibtex-url): New optional arg no-browse. Return the URL or nil if
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70249
diff changeset
4687 Return the URL or nil if none can be generated."
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4688 (interactive)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4689 (unless pos (setq pos (point)))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4690 (save-excursion
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4691 (goto-char pos)
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4692 (bibtex-beginning-of-entry)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4693 (let ((end (save-excursion (bibtex-end-of-entry)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4694 (fields-alist (save-excursion (bibtex-parse-entry t)))
57815
3e586af3d7eb Use `button's.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57070
diff changeset
4695 ;; Always ignore case,
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4696 (case-fold-search t)
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4697 text url scheme obj fmt fl-match step)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4698 ;; The return value of `bibtex-parse-entry' (i.e., FIELDS-ALIST)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4699 ;; is always used to generate the URL. However, if the BibTeX
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4700 ;; entry contains more than one URL, we have multiple matches
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4701 ;; for the first step defining the generation of the URL.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4702 ;; Therefore, we try to initiate the generation of the URL
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4703 ;; based on the match of `bibtex-font-lock-url' that is the
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4704 ;; closest to POS. If that fails (no match found) we try to
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4705 ;; initiate the generation of the URL based on the properly
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4706 ;; concatenated CONTENT of the field as returned by
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4707 ;; `bibtex-text-in-field-bounds'. The latter approach can
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4708 ;; differ from the former because `bibtex-font-lock-url' uses
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4709 ;; the buffer itself.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4710 (while (bibtex-font-lock-url end t)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4711 (push (list (bibtex-dist pos (match-beginning 0) (match-end 0))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4712 (match-beginning 0)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4713 (buffer-substring-no-properties
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4714 (match-beginning 0) (match-end 0)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4715 fl-match)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4716 ;; `bibtex-font-lock-url' moves point to end of match.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4717 (forward-char))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4718 (when fl-match
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4719 (setq fl-match (car (sort fl-match (lambda (x y) (< (car x) (car y))))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4720 (goto-char (nth 1 fl-match))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4721 (bibtex-beginning-of-field) (re-search-backward ",")
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4722 (let* ((bounds (bibtex-parse-field))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4723 (name (bibtex-name-in-field bounds))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4724 (content (bibtex-text-in-field-bounds bounds t))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4725 (lst bibtex-generate-url-list))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4726 ;; This match can fail when CONTENT differs from text in buffer.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4727 (when (string-match (regexp-quote (nth 2 fl-match)) content)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4728 ;; TEXT is the part of CONTENT that starts with the match
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4729 ;; of `bibtex-font-lock-url' we are looking for.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4730 (setq text (substring content (match-beginning 0)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4731 (while (and (not url) (setq scheme (pop lst)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4732 ;; Verify the match of `bibtex-font-lock-url' by
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4733 ;; comparing with TEXT.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4734 (when (and (bibtex-string= (caar scheme) name)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4735 (string-match (cdar scheme) text))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4736 (setq url t scheme (cdr scheme)))))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4737
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4738 ;; If the match of `bibtex-font-lock-url' was not approved
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4739 ;; parse FIELDS-ALIST, i.e., the output of `bibtex-parse-entry'.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4740 (unless url
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4741 (let ((lst bibtex-generate-url-list))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4742 (while (and (not url) (setq scheme (pop lst)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4743 (when (and (setq text (cdr (assoc-string (caar scheme)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4744 fields-alist t)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4745 (string-match (cdar scheme) text))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4746 (setq url t scheme (cdr scheme))))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4747
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4748 (when url
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4749 (setq url (if (null scheme) (match-string 0 text)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4750 (if (stringp (car scheme))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4751 (setq fmt (pop scheme)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4752 (dotimes (i (length scheme))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4753 (setq step (nth i scheme))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4754 ;; The first step shall use TEXT as obtained earlier.
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4755 (unless (= i 0)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4756 (setq text (cdr (assoc-string (car step) fields-alist t))))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4757 (if (string-match (nth 1 step) text)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4758 (push (cond ((functionp (nth 2 step))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4759 (funcall (nth 2 step) text))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4760 ((numberp (nth 2 step))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4761 (match-string (nth 2 step) text))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4762 (t
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4763 (replace-match (nth 2 step) t nil text)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4764 obj)
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4765 ;; If SCHEME is set up correctly,
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4766 ;; we should never reach this point
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4767 (error "Match failed: %s" text)))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4768 (if fmt (apply 'format fmt (nreverse obj))
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4769 (apply 'concat (nreverse obj)))))
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105170
diff changeset
4770 (if (called-interactively-p 'interactive) (message "%s" url))
81591
33952a25e52a (bibtex-entry-format): New options `whitespace', `braces', and `string'.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 77281
diff changeset
4771 (unless no-browse (browse-url url)))
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105170
diff changeset
4772 (if (and (not url) (called-interactively-p 'interactive))
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105170
diff changeset
4773 (message "No URL known."))
70250
5d4423d8a6f5 (bibtex-url): New optional arg no-browse. Return the URL or nil if
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents: 70249
diff changeset
4774 url)))
57054
0b058857c704 (bibtex-mark-active, bibtex-run-with-idle-timer): Move `if' inside the defun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55880
diff changeset
4775
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4776
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
4777 ;; Make BibTeX a Feature
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4778
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
4779 (provide 'bibtex)
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
4780
55348
c1f70dc19ce5 (bibtex-progress-message): Fix docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55312
diff changeset
4781 ;; arch-tag: ee2be3af-caad-427f-b42a-d20fad630d04
2602
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
4782 ;;; bibtex.el ends here