annotate lisp/textmodes/bibtex.el @ 54569:3a7d16dc72af

*** empty log message ***
author Juri Linkov <juri@jurta.org>
date Fri, 26 Mar 2004 07:05:31 +0000
parents a6806242012a
children 3b7a4fa9b2d8
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
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3 ;; Copyright (C) 1992,94,95,96,97,98,1999,2003 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 810
diff changeset
4
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
5 ;; Author: Stefan Schoef <schoef@offis.uni-oldenburg.de>
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
6 ;; Bengt Martensson <bengt@mathematik.uni-Bremen.de>
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
7 ;; Mark Shapiro <shapiro@corto.inria.fr>
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
8 ;; Mike Newton <newton@gumby.cs.caltech.edu>
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
9 ;; Aaron Larson <alarson@src.honeywell.com>
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
10 ;; Dirk Herrmann <D.Herrmann@tu-bs.de>
45849
4f21f0785255 New maintainer.
Richard M. Stallman <rms@gnu.org>
parents: 45788
diff changeset
11 ;; Maintainer: Roland Winkler <roland.winkler@physik.uni-erlangen.de>
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
12 ;; Keywords: BibTeX, LaTeX, TeX
810
80303373daae *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
13
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; This file is part of GNU Emacs.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; GNU Emacs is free software; you can redistribute it and/or modify
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; it under the terms of the GNU General Public License as published by
1851
b3ce1eae3eb0 Update GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 845
diff changeset
18 ;; the Free Software Foundation; either version 2, or (at your option)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; any later version.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 ;; GNU Emacs is distributed in the hope that it will be useful,
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 ;; GNU General Public License for more details.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13968
diff changeset
27 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13968
diff changeset
28 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13968
diff changeset
29 ;; Boston, MA 02111-1307, USA.
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
31 ;;; Commentary:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13968
diff changeset
32
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
33 ;; Major mode for editing and validating BibTeX files.
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
35 ;; Usage:
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
36 ;; See documentation for function bibtex-mode (or type "\M-x describe-mode"
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
37 ;; 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
38
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
39 ;; Todo:
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
40 ;; Distribute texinfo file.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
41
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
42 ;;; Code:
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
43
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
44
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
45 ;; User Options:
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
46
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
47 (defgroup bibtex nil
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
48 "BibTeX mode"
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
49 :group 'tex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
50 :prefix "bibtex-")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
51
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
52 (defgroup bibtex-autokey nil
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
53 "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
54 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
55 :prefix "bibtex-autokey-")
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
56
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
57 (defcustom bibtex-mode-hook nil
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
58 "List of functions to call on entry to BibTeX mode."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
59 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
60 :type 'hook)
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
61
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
62 (defcustom bibtex-field-delimiters 'braces
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
63 "*Type of field delimiters. Allowed values are `braces' or `double-quotes'."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
64 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
65 :type '(choice (const braces)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
66 (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
67
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
68 (defcustom bibtex-entry-delimiters 'braces
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
69 "*Type of entry delimiters. Allowed values are `braces' or `parentheses'."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
70 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
71 :type '(choice (const braces)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
72 (const parentheses)))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
73
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
74 (defcustom bibtex-include-OPTcrossref '("InProceedings" "InCollection")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
75 "*List of entries that get an OPTcrossref field."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
76 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
77 :type '(repeat string))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
78
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
79 (defcustom bibtex-include-OPTkey t
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
80 "*If non-nil, all entries will have an OPTkey field.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
81 If this is a string, it will be used as the initial field text.
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
82 If this is a function, it will be called to generate the initial field text."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
83 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
84 :type '(choice (const :tag "None" nil)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
85 (string :tag "Initial text")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
86 (function :tag "Initialize Function" :value fun)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
87 (other :tag "Default" t)))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
88
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
89 (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
90 '(("annote" "Personal annotation (ignored)"))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
91 "*List of optional fields the user wants to have always present.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
92 Entries should be of the same form as the OPTIONAL and
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
93 CROSSREF-OPTIONAL lists in `bibtex-entry-field-alist' (see documentation
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
94 of this variable for details)."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
95 :group 'bibtex
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
96 :type '(repeat (group (string :tag "Field")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
97 (string :tag "Comment")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
98 (option (group :inline t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
99 :extra-offset -4
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
100 (choice :tag "Init" :value ""
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
101 string
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
102 function))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
103
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
104 (defcustom bibtex-entry-format
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
105 '(opts-or-alts required-fields numerical-fields)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
106 "*Type of formatting performed by `bibtex-clean-entry'.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
107 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
108 opts-or-alts Delete empty optional and alternative fields and
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
109 remove OPT and ALT prefixes from used fields.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
110 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
111 numerical-fields Delete delimiters around numeral fields.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
112 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
113 (for scribe compatibility).
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
114 inherit-booktitle If entry contains a crossref field and booktitle
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
115 field is empty, it is set to the contents of the
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
116 title field of the crossreferenced entry.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
117 Caution: this will work only if buffer is
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
118 correctly sorted.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
119 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
120 signs (depending on the value of
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
121 `bibtex-align-at-equal-sign') begin in the same column.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
122 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
123 according to value of `bibtex-comma-after-last-field'.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
124 delimiters Change delimiters according to variables
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
125 `bibtex-field-delimiters' and `bibtex-entry-delimiters'.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
126 unify-case Change case of entry and field names.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
127
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
128 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
129 The value nil means do no formatting at all."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
130 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
131 :type '(choice (const :tag "None" nil)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
132 (const :tag "All" t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
133 (set :menu-tag "Some"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
134 (const opts-or-alts)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
135 (const required-fields)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
136 (const numerical-fields)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
137 (const page-dashes)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
138 (const inherit-booktitle)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
139 (const realign)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
140 (const last-comma)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
141 (const delimiters)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
142 (const unify-case))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
144 (defcustom bibtex-clean-entry-hook nil
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
145 "*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
146 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
147 narrowed to just the entry."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
148 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
149 :type 'hook)
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
150
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
151 (defcustom bibtex-maintain-sorted-entries nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
152 "*If non-nil, BibTeX mode maintains all BibTeX 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
153 Allowed non-nil values are:
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
154 plain All entries are sorted alphabetically.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
155 crossref All entries are sorted alphabetically unless an entry has a
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
156 crossref field. These crossrefed entries are placed in
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
157 alphabetical order immediately preceding the main entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
158 entry-class The entries are divided into classes according to their
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
159 entry name, see `bibtex-sort-entry-class'. Within each class
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
160 the entries are sorted alphabetically.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
161 See also `bibtex-sort-ignore-string-entries'."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
162 :group 'bibtex
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
163 :type '(choice (const nil)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
164 (const plain)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
165 (const crossref)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
166 (const entry-class)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
167
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
168 (defvar bibtex-sort-entry-class
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
169 '(("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
170 (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
171 ("Book" "Proceedings"))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
172 "*List of classes of BibTeX entry names, 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
173 If value of `bibtex-maintain-sorted-entries' is `entry-class'
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
174 entries are ordered according to the classes they belong to. Each
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
175 class contains a list of entry names. An entry `catch-all' applies
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
176 to all entries not explicitely mentioned.")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
177
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
178 (defcustom bibtex-sort-ignore-string-entries t
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
179 "*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
180 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
181 \(e.g., sorting, locating alphabetical position for new entries, etc.)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
182 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
183 :type 'boolean)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
184
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
185 (defcustom bibtex-field-kill-ring-max 20
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
186 "*Max length of `bibtex-field-kill-ring' before discarding oldest elements."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
187 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
188 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
189
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
190 (defcustom bibtex-entry-kill-ring-max 20
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
191 "*Max length of `bibtex-entry-kill-ring' before discarding oldest elements."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
192 :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
193 :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
194
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
195 (defcustom bibtex-parse-keys-timeout 60
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
196 "*Specify interval for parsing BibTeX buffers.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
197 All BibTeX buffers in Emacs are parsed if Emacs has been idle
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
198 `bibtex-parse-keys-timeout' seconds. Only buffers which were modified
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
199 after last parsing and which are maintained in sorted order are parsed."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
200 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
201 :type 'integer)
15637
405b1ecbf8ba (bibtex-reference-head): Allow spaces and tabs between
Karl Heuer <kwzh@gnu.org>
parents: 15565
diff changeset
202
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
203 (defcustom bibtex-parse-keys-fast t
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
204 "*If non-nil, use fast but simplified algorithm for parsing BibTeX keys.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
205 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
206 :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
207 :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
208
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
209 (defvar bibtex-entry-field-alist
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
210 '(
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
211 ("Article"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
212 ((("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
213 ("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
214 ("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
215 ("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
216 (("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
217 ("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
218 ("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
219 ("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
220 ("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
221 ((("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
222 ("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
223 (("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
224 ("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
225 ("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
226 ("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
227 ("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
228 ("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
229 ("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
230 ("Book"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
231 ((("author" "Author1 [and Author2 ...] [and others]" "" 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
232 ("editor" "Editor1 [and Editor2 ...] [and others]" "" t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
233 ("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
234 ("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
235 ("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
236 (("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
237 ("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
238 ("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
239 ("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
240 ("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
241 ("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
242 ("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
243 ((("author" "Author1 [and Author2 ...] [and others]" "" t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
244 ("editor" "Editor1 [and Editor2 ...] [and others]" "" t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
245 ("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
246 (("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
247 ("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
248 ("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
249 ("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
250 ("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
251 ("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
252 ("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
253 ("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
254 ("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
255 ("Booklet"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
256 ((("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
257 (("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
258 ("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
259 ("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
260 ("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
261 ("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
262 ("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
263 ("InBook"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
264 ((("author" "Author1 [and Author2 ...] [and others]" "" 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
265 ("editor" "Editor1 [and Editor2 ...] [and others]" "" t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
266 ("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
267 ("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
268 ("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
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 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
271 ("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
272 ("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
273 ("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
274 ("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
275 ("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
276 ("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
277 ("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
278 ("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
279 ((("author" "Author1 [and Author2 ...] [and others]" "" t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
280 ("editor" "Editor1 [and Editor2 ...] [and others]" "" t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
281 ("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
282 ("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
283 (("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
284 ("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
285 ("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
286 ("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
287 ("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
288 ("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
289 ("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
290 ("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
291 ("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
292 ("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
293 ("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
294 ("InCollection"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
295 ((("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
296 ("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
297 ("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
298 ("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
299 ("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
300 (("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
301 ("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
302 ("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
303 ("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
304 ("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
305 ("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
306 ("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
307 ("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
308 ("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
309 ("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
310 ("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
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 ("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
313 ("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
314 (("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
315 ("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
316 ("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
317 ("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
318 ("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
319 ("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
320 ("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
321 ("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
322 ("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
323 ("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
324 ("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
325 ("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
326 ("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
327 ("InProceedings"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
328 ((("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
329 ("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
330 ("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
331 ("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
332 (("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
333 ("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
334 ("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
335 ("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
336 ("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
337 ("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
338 ("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
339 ("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
340 ("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
341 ("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
342 ((("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
343 ("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
344 (("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
345 ("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
346 ("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
347 ("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
348 ("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
349 ("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
350 ("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
351 ("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
352 ("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
353 ("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
354 ("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
355 ("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
356 ("Manual"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
357 ((("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
358 (("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
359 ("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
360 ("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
361 ("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
362 ("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
363 ("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
364 ("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
365 ("MastersThesis"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
366 ((("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
367 ("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
368 ("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
369 ("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
370 (("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
371 ("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
372 ("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
373 ("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
374 ("Misc"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
375 (()
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
376 (("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
377 ("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
378 ("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
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 ("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
381 ("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
382 ("PhdThesis"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
383 ((("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
384 ("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
385 ("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
386 ("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
387 (("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
388 ("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
389 ("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
390 ("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
391 ("Proceedings"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
392 ((("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
393 ("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
394 (("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
395 ("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
396 ("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
397 ("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
398 ("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
399 ("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
400 ("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
401 ("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
402 ("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
403 ("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
404 ("TechReport"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
405 ((("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
406 ("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
407 ("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
408 ("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
409 (("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
410 ("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
411 ("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
412 ("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
413 ("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
414 ("Unpublished"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
415 ((("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
416 ("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
417 ("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
418 (("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
419 ("year" "Year of publication"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
420 )
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
421
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
422 "Defines entry types and their associated fields.
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
423 List of
43950
5ef8be2a8db1 (bibtex-sort-ignore-string-entries)
Pavel Janík <Pavel@Janik.cz>
parents: 43758
diff changeset
424 \(ENTRY-NAME (REQUIRED OPTIONAL) (CROSSREF-REQUIRED CROSSREF-OPTIONAL))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
425 triples.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
426 If the third element is nil, the first pair is always used.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
427 If not, the second pair is used in the case of presence of a crossref
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
428 field and the third in the case of absence.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
429 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
430 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
431 \(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
432 COMMENT-STRING, INIT, and ALTERNATIVE-FLAG are optional.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
433 FIELD-NAME is the name of the field, COMMENT-STRING the comment to
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
434 appear in the echo area, INIT is either the initial content of the
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
435 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
436 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
437 field is an alternative. ALTERNATIVE-FLAG may be t only in the
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
438 REQUIRED or CROSSREF-REQUIRED lists.")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
439
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
440 (defvar bibtex-comment-start "@Comment"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
441 "String starting a BibTeX comment.")
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
442
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
443 (defcustom bibtex-add-entry-hook nil
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
444 "List of functions to call when entry has been inserted."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
445 :group 'bibtex
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
446 :type 'hook)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
447
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
448 (defcustom bibtex-predefined-month-strings
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
449 '(("jan" . "January")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
450 ("feb" . "February")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
451 ("mar" . "March")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
452 ("apr" . "April")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
453 ("may" . "May")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
454 ("jun" . "June")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
455 ("jul" . "July")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
456 ("aug" . "August")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
457 ("sep" . "September")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
458 ("oct" . "October")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
459 ("nov" . "November")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
460 ("dec" . "December"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
461 "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
462 Each element is a pair of strings (ABBREVIATION . EXPANSION)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
463 :group 'bibtex
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
464 :type '(repeat (cons (string :tag "Month abbreviation")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
465 (string :tag "Month expansion"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
466
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
467 (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
468 (append
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
469 bibtex-predefined-month-strings
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
470 '(("acmcs" . "ACM Computing Surveys")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
471 ("acta" . "Acta Informatica")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
472 ("cacm" . "Communications of the ACM")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
473 ("ibmjrd" . "IBM Journal of Research and Development")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
474 ("ibmsj" . "IBM Systems Journal")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
475 ("ieeese" . "IEEE Transactions on Software Engineering")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
476 ("ieeetc" . "IEEE Transactions on Computers")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
477 ("ieeetcad" . "IEEE Transactions on Computer-Aided Design of Integrated Circuits")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
478 ("ipl" . "Information Processing Letters")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
479 ("jacm" . "Journal of the ACM")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
480 ("jcss" . "Journal of Computer and System Sciences")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
481 ("scp" . "Science of Computer Programming")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
482 ("sicomp" . "SIAM Journal on Computing")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
483 ("tcs" . "Theoretical Computer Science")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
484 ("tocs" . "ACM Transactions on Computer Systems")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
485 ("tods" . "ACM Transactions on Database Systems")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
486 ("tog" . "ACM Transactions on Graphics")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
487 ("toms" . "ACM Transactions on Mathematical Software")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
488 ("toois" . "ACM Transactions on Office Information Systems")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
489 ("toplas" . "ACM Transactions on Programming Languages and Systems")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
490 "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
491 Each element is a pair of strings (ABBREVIATION . EXPANSION)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
492 :group 'bibtex
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
493 :type '(repeat (cons (string :tag "String")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
494 (string :tag "String expansion"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
495
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
496 (defcustom bibtex-string-files nil
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
497 "*List of BibTeX files containing string definitions.
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
498 Those files must be specified using pathnames relative to the
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
499 directories specified in `bibtex-string-file-path'."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
500 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
501 :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
502
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
503 (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
504 "*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
505
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
506 (defcustom bibtex-help-message 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
507 "*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
508 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
509 :type 'boolean)
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
510
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
511 (defcustom bibtex-autokey-prefix-string ""
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
512 "*String to use as a prefix for all generated 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
513 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
514 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
515 :type 'string)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
516
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
517 (defcustom bibtex-autokey-names 1
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
518 "*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
519 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
520 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
521 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
522 :group 'bibtex-autokey
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
523 :type '(choice (const :tag "All" infty)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
524 integer))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
525
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
526 (defcustom bibtex-autokey-names-stretch 0
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
527 "*Number of names that can additionally be used.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
528 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
529 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
530 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
531 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
532
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
533 (defcustom bibtex-autokey-additional-names ""
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
534 "*String to prepend 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
535 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
536 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
537 :type 'string)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
538
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
539 (defvar bibtex-autokey-transcriptions
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
540 '(;; language specific characters
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
541 ("\\\\aa" . "a") ; \aa -> a
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
542 ("\\\\AA" . "A") ; \AA -> A
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
543 ("\\\"a\\|\\\\\\\"a\\|\\\\ae" . "ae") ; "a,\"a,\ae -> ae
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
544 ("\\\"A\\|\\\\\\\"A\\|\\\\AE" . "Ae") ; "A,\"A,\AE -> Ae
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
545 ("\\\\i" . "i") ; \i -> i
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
546 ("\\\\j" . "j") ; \j -> j
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
547 ("\\\\l" . "l") ; \l -> l
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
548 ("\\\\L" . "L") ; \L -> L
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
549 ("\\\"o\\|\\\\\\\"o\\|\\\\o\\|\\\\oe" . "oe") ; "o,\"o,\o,\oe -> oe
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
550 ("\\\"O\\|\\\\\\\"O\\|\\\\O\\|\\\\OE" . "Oe") ; "O,\"O,\O,\OE -> Oe
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
551 ("\\\"s\\|\\\\\\\"s\\|\\\\3" . "ss") ; "s,\"s,\3 -> ss
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
552 ("\\\"u\\|\\\\\\\"u" . "ue") ; "u,\"u -> ue
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
553 ("\\\"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
554 ;; accents
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
555 ("\\\\`\\|\\\\'\\|\\\\\\^\\|\\\\~\\|\\\\=\\|\\\\\\.\\|\\\\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
556 ;; 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
557 ("[`'\"{}#]" . "")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
558 ;; spaces
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
559 ("[ \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
560 "Alist of (OLD-REGEXP . NEW-STRING) pairs.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
561 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
562 `bibtex-autokey-titleword-change-strings'. Defaults to translating some
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
563 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
564 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
565
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
566 (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
567 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
568 "Alist of (OLD-REGEXP . NEW-STRING) pairs.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
569 Any part of name matching a OLD-REGEXP is replaced by NEW-STRING.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
570 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
571 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
572 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
573 :group 'bibtex-autokey
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
574 :type '(repeat (cons (regexp :tag "Old")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
575 (string :tag "New"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
576
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
577 (defcustom bibtex-autokey-name-case-convert 'downcase
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
578 "*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
579 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
580 :group 'bibtex-autokey
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
581 :type '(choice (const :tag "Preserve case" identity)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
582 (const :tag "Downcase" downcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
583 (const :tag "Capitalize" capitalize)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
584 (const :tag "Upcase" upcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
585 (function :tag "Conversion function")))
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
586
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
587 (defcustom bibtex-autokey-name-length 'infty
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
588 "*Number of characters from name to incorporate into key.
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
589 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
590 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
591 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
592 :type '(choice (const :tag "All" infty)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
593 integer))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
594
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
595 (defcustom bibtex-autokey-name-separator ""
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
596 "*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
597 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
598 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
599 :type 'string)
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
600
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
601 (defcustom bibtex-autokey-year-length 2
20866
2501e131622d (bibtex-autokey-year-length): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20459
diff changeset
602 "*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
603 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
604 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
605 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
606
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
607 (defcustom bibtex-autokey-use-crossref t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
608 "*If non-nil use fields from crossreferenced entry if necessary.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
609 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
610 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
611 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
612 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
613 :type 'boolean)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
614
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
615 (defcustom bibtex-autokey-titlewords 5
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
616 "*Number of title words to use for the automatically generated reference key.
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
617 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
618 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
619 `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
620 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
621 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
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-title-terminators
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
626 '("\\." "!" "\\?" ":" ";" "--")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
627 "*Regexp list defining the termination of the main part of the title.
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
628 Case of the regexps is ignored.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
629 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
630 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
631 :type '(repeat regexp))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
632
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
633 (defcustom bibtex-autokey-titlewords-stretch 2
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
634 "*Number of words that can additionally be used from the title.
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
635 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
636 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
637 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
638 :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
639
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
640 (defcustom bibtex-autokey-titleword-ignore
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
641 '("A" "An" "On" "The" "Eine?" "Der" "Die" "Das"
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
642 "[^A-Z].*" ".*[^a-zA-Z0-9].*")
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
643 "*Determines words from the title that are not to be used in the key.
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
644 Each item of the list is a regexp. If a word of the title matchs a
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
645 regexp from that list, it is not included in the title part of 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
646 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
647 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
648 :type '(repeat regexp))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
649
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
650 (defcustom bibtex-autokey-titleword-case-convert 'downcase
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
651 "*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
652 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
653 :group 'bibtex-autokey
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
654 :type '(choice (const :tag "Preserve case" identity)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
655 (const :tag "Downcase" downcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
656 (const :tag "Capitalize" capitalize)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
657 (const :tag "Upcase" upcase)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
658 (function :tag "Conversion function")))
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
659
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
660 (defcustom bibtex-autokey-titleword-abbrevs nil
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
661 "*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
662 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
663 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
664 See `bibtex-generate-autokey' for details."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
665 :group 'bibtex-autokey
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
666 :type '(repeat (cons (regexp :tag "Old")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
667 (string :tag "New"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
668
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
669 (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
670 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
671 "Alist of (OLD-REGEXP . NEW-STRING) pairs.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
672 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
673 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
674 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
675 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
676 :group 'bibtex-autokey
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
677 :type '(repeat (cons (regexp :tag "Old")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
678 (string :tag "New"))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
679
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
680 (defcustom bibtex-autokey-titleword-length 5
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
681 "*Number of characters from title words to incorporate into key.
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
682 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
683 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
684 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
685 :type '(choice (const :tag "All" infty)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
686 integer))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
687
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
688 (defcustom bibtex-autokey-titleword-separator "_"
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
689 "*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
690 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
691 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
692 :type 'string)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
693
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
694 (defcustom bibtex-autokey-name-year-separator ""
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
695 "*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
696 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
697 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
698 :type 'string)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
699
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
700 (defcustom bibtex-autokey-year-title-separator ":_"
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
701 "*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
702 See `bibtex-generate-autokey' for details."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
703 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
704 :type 'string)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
705
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
706 (defcustom bibtex-autokey-edit-before-use t
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
707 "*If non-nil, user is allowed to edit the generated key before it is used."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
708 :group 'bibtex-autokey
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
709 :type 'boolean)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
710
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
711 (defcustom bibtex-autokey-before-presentation-function nil
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
712 "*Function to call before the generated key is presented.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
713 If non-nil this should be a function which is called before the generated key
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
714 is presented. The function must take one argument (the automatically
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
715 generated key), and must return a string (the key to use)."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
716 :group 'bibtex-autokey
35962
ad7104908c16 (bibtex-autokey-before-presentation-function): Fix :type.
Dave Love <fx@gnu.org>
parents: 27701
diff changeset
717 :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
718
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
719 (defcustom bibtex-entry-offset 0
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
720 "*Offset for BibTeX entries.
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
721 Added to the value of all other variables which determine colums."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
722 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
723 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
724
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
725 (defcustom bibtex-field-indentation 2
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
726 "*Starting column for the name part in BibTeX fields."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
727 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
728 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
729
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
730 (defcustom bibtex-text-indentation
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
731 (+ bibtex-field-indentation
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
732 (length "organization = "))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
733 "*Starting column for the text part in BibTeX fields.
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
734 Should be equal to the space needed for the longest name part."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
735 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
736 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
737
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
738 (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
739 (+ bibtex-text-indentation 1)
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
740 "*Starting column for continuation lines of BibTeX fields."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
741 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
742 :type 'integer)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
743
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
744 (defcustom bibtex-align-at-equal-sign nil
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
745 "*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
746 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
747 `bibtex-text-indentation', minus 2."
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
748 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
749 :type 'boolean)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
750
19460
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
751 (defcustom bibtex-comma-after-last-field nil
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
752 "*If non-nil, a comma is put at end of last field in the entry template."
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
753 :group 'bibtex
f15d80b084d8 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18502
diff changeset
754 :type 'boolean)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
755
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
756 (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
757 "If non-nil automatically add missing commas at end of BibTeX fields."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
758 :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
759
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
760 (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
761 "Automatically fill fields if possible for those BibTeX entry types."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
762 :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
763
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
764 (defcustom bibtex-complete-key-cleanup nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
765 "*Function called by `bibtex-complete' after insertion of a key fragment."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
766 :group 'bibtex-autokey
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
767 :type '(choice (const :tag "None" nil)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
768 (function :tag "Cleanup function")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
769
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
770 ;; bibtex-font-lock-keywords is a user option as well, but since the
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
771 ;; 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
772 ;; 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
773
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
774
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
775 ;; Syntax Table, Keybindings and BibTeX Entry List
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
776 (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
777 (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
778 (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
779 (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
780 (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
781 (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
782 (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
783 (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
784 (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
785 (modify-syntax-entry ?\n "> " st)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
786 ;; 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
787 (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
788 (modify-syntax-entry ?~ " " st)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
789 st)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
790 "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
791
2465861025cd Installed Aaron Larson's new bibtex.el. See the header comment for
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
792 (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
793 (let ((km (make-sparse-keymap)))
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
794 ;; 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
795 (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
796 (define-key km "\n" 'bibtex-next-field)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
797 (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
798 (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
799 (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
800 (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
801 (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
802 (define-key km "\C-c\C-q" 'bibtex-fill-entry)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
803 (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
804 (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
805 (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
806 (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
807 (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
808 (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
809 (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
810 (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
811 (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
812 (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
813 (define-key km "\C-c\C-f" 'bibtex-make-field)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
814 (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
815 (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
816 (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
817 (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
818 (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
819 (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
820 (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
821 (define-key km "\C-c\C-rw" 'widen)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
822 (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
823 (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
824 (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
825 (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
826 (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
827 (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
828 (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
829 (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
830 (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
831 (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
832 (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
833 (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
834 (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
835 (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
836 (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
837 (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
838 (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
839 (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
840 (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
841 km)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
842 "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
843
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
844 (easy-menu-define
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
845 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
846 '("BibTeX-Edit"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
847 ("Moving inside an Entry"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
848 ["End of Field" bibtex-find-text t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
849 ["Next Field" bibtex-next-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
850 ["Beginning of Entry" bibtex-beginning-of-entry t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
851 ["End of Entry" bibtex-end-of-entry 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
852 ("Moving in BibTeX Buffer"
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
853 ["Find Entry" bibtex-find-entry t]
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
854 ["Find Crossref Entry" bibtex-find-crossref t])
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
855 ("Operating on Current Entry"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
856 ["Fill Entry" bibtex-fill-entry t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
857 ["Clean Entry" bibtex-clean-entry t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
858 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
859 ["Kill Entry" bibtex-kill-entry t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
860 ["Copy Entry to Kill Ring" bibtex-copy-entry-as-kill t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
861 ["Paste Most Recently Killed Entry" bibtex-yank t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
862 ["Paste Previously Killed Entry" bibtex-yank-pop t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
863 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
864 ["Ispell Entry" bibtex-ispell-entry t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
865 ["Ispell Entry Abstract" bibtex-ispell-abstract t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
866 ["Narrow to Entry" bibtex-narrow-to-entry t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
867 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
868 ["View Cite Locations (RefTeX)" reftex-view-crossref-from-bibtex
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
869 (fboundp 'reftex-view-crossref-from-bibtex)])
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
870 ("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
871 ["Fill Field" fill-paragraph t]
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
872 ["Remove Delimiters" bibtex-remove-delimiters t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
873 ["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
874 ["Clear Field" bibtex-empty-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
875 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
876 ["Kill Field" bibtex-kill-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
877 ["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
878 ["Paste Most Recently Killed Field" bibtex-yank t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
879 ["Paste Previously Killed Field" bibtex-yank-pop t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
880 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
881 ["Make New Field" bibtex-make-field t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
882 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
883 ["Snatch from Similar Following Field" bibtex-pop-next t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
884 ["Snatch from Similar Preceding Field" bibtex-pop-previous t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
885 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
886 ["String or Key Complete" bibtex-complete t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
887 "--"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
888 ["Help about Current Field" bibtex-print-help-message t])
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
889 ("Operating on Buffer or Region"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
890 ["Validate Entries" bibtex-validate t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
891 ["Sort Entries" bibtex-sort-buffer t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
892 ["Reformat Entries" bibtex-reformat t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
893 ["Count Entries" bibtex-count-entries t])
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
894 ("Miscellaneous"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
895 ["Convert Alien Buffer" bibtex-convert-alien 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
896
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
897 (easy-menu-define
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
898 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
899 (list "Entry-Types"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
900 ["Article in Journal" bibtex-Article t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
901 ["Article in Conference Proceedings" bibtex-InProceedings t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
902 ["Article in a Collection" bibtex-InCollection t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
903 ["Chapter or Pages in a Book" bibtex-InBook t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
904 ["Conference Proceedings" bibtex-Proceedings t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
905 ["Book" bibtex-Book t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
906 ["Booklet (Bound, but no Publisher/Institution)" bibtex-Booklet t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
907 ["PhD. Thesis" bibtex-PhdThesis t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
908 ["Master's Thesis" bibtex-MastersThesis t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
909 ["Technical Report" bibtex-TechReport t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
910 ["Technical Manual" bibtex-Manual t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
911 ["Unpublished" bibtex-Unpublished t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
912 ["Miscellaneous" bibtex-Misc t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
913 ["String" bibtex-String t]
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
914 ["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
915
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
916
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
917 ;; 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
918
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
919 (defvar bibtex-pop-previous-search-point nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
920 "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
921
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
922 (defvar bibtex-pop-next-search-point nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
923 "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
924
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
925 (defvar bibtex-field-kill-ring nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
926 "Ring of least recently killed fields.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
927 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
928
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
929 (defvar bibtex-field-kill-ring-yank-pointer nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
930 "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
931
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
932 (defvar bibtex-entry-kill-ring nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
933 "Ring of least recently killed entries.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
934 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
935
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
936 (defvar bibtex-entry-kill-ring-yank-pointer nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
937 "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
938
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
939 (defvar bibtex-last-kill-command nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
940 "Type of the last kill command (either 'field or 'entry).")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
941
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
942 (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
943 (lazy-completion-table 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
944 bibtex-parse-strings (bibtex-string-files-init))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
945 "Completion table for BibTeX string keys.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
946 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
947 (make-variable-buffer-local '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
948
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
949 (defvar bibtex-reference-keys
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
950 (lazy-completion-table bibtex-reference-keys bibtex-parse-keys nil nil t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
951 "Completion table for BibTeX reference keys.")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
952 (make-variable-buffer-local 'bibtex-reference-keys)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
953
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
954 (defvar bibtex-buffer-last-parsed-tick nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
955 "Last value returned by `buffer-modified-tick' when buffer
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
956 was parsed for keys the last time.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
957
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
958 (defvar bibtex-parse-idle-timer nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
959 "Stores if timer is already installed.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
960
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
961 (defvar bibtex-progress-lastperc nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
962 "Last reported percentage for the progress message.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
963
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
964 (defvar bibtex-progress-lastmes nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
965 "Last reported progress message.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
966
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
967 (defvar bibtex-progress-interval nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
968 "Interval for progress messages.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
969
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
970 (defvar bibtex-key-history nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
971 "History list for reading keys.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
972
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
973 (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
974 "History list for reading entry types.")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
975
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
976 (defvar bibtex-field-history nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
977 "History list for reading field names.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
978
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
979 (defvar bibtex-reformat-previous-options nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
980 "Last reformat options given.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
981
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
982 (defvar bibtex-reformat-previous-reference-keys nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
983 "Last reformat reference keys option given.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
984
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
985 (defconst bibtex-field-name "[^\"#%'(),={} \t\n0-9][^\"#%'(),={} \t\n]*"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
986 "Regexp matching the name part of a BibTeX field.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
987
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
988 (defconst bibtex-entry-type (concat "@" bibtex-field-name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
989 "Regexp matching the type part of a BibTeX entry.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
990
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
991 (defconst bibtex-reference-key "[][a-zA-Z0-9.:;?!`'/*@+|()<>&_^$-]+"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
992 "Regexp matching the reference key part of a BibTeX entry.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
993
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
994 (defconst bibtex-field-const "[][a-zA-Z0-9.:;?!`'/*@+=|<>&_^$-]+"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
995 "Regexp matching a BibTeX field constant.")
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
996
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
997 (defconst bibtex-entry-head
15637
405b1ecbf8ba (bibtex-reference-head): Allow spaces and tabs between
Karl Heuer <kwzh@gnu.org>
parents: 15565
diff changeset
998 (concat "^[ \t]*\\("
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
999 bibtex-entry-type
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1000 "\\)[ \t]*[({][ \t\n]*\\("
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1001 bibtex-reference-key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1002 "\\)")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1003 "Regexp matching the header line of a BibTeX entry.")
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1004
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1005 (defconst bibtex-entry-maybe-empty-head
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1006 (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
1007 "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
1008
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1009 (defconst bibtex-type-in-head 1
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1010 "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
1011
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1012 (defconst bibtex-key-in-head 2
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1013 "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
1014
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1015 (defconst bibtex-entry-postfix "[ \t\n]*,?[ \t\n]*[})]"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1016 "Regexp matching the postfix of a BibTeX entry.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1017
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1018 (defvar bibtex-known-entry-type-re
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1019 (regexp-opt (mapcar 'car bibtex-entry-field-alist))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1020 "Regexp matching the name of a BibTeX entry type.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1021
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1022 (defvar bibtex-valid-entry-re
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1023 (concat "@[ \t]*\\(" bibtex-known-entry-type-re "\\)")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1024 "Regexp matching the name of a valid BibTeX entry.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1025
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1026 (defvar bibtex-valid-entry-whitespace-re
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1027 (concat "[ \t\n]*\\(" bibtex-valid-entry-re "\\)")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1028 "Regexp matching the name of a valid BibTeX entry preceded by whitespace.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1029
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1030 (defvar bibtex-any-valid-entry-re
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1031 (concat "@[ \t]*"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1032 (regexp-opt (append '("String")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1033 (mapcar 'car bibtex-entry-field-alist))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1034 t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1035 "Regexp matching the name of any valid BibTeX entry (including string).")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1036
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1037
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1038 (defconst bibtex-empty-field-re "\"\"\\|{}"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1039 "Regexp matching an empty field.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1040
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1041 (defconst bibtex-quoted-string-re
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1042 (concat "\""
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1043 "\\("
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1044 "[^\"\\]" ; anything but quote or backslash
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1045 "\\|"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1046 "\\("
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1047 "\\\\\\(.\\|\n\\)" ; any backslash quoted character
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1048 "\\)"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1049 "\\)*"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1050 "\"")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1051 "Regexp matching a field string enclosed by quotes.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1052
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1053 (defconst bibtex-font-lock-syntactic-keywords
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1054 `((,(concat "^[ \t]*\\(" (substring bibtex-comment-start 0 1) "\\)"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1055 (substring bibtex-comment-start 1) "\\>")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1056 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
1057
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
1058 (defvar bibtex-font-lock-keywords
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
1059 (list
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1060 ;; entry type and reference key
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1061 (list bibtex-entry-maybe-empty-head
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
1062 (list bibtex-type-in-head 'font-lock-function-name-face)
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 20907
diff changeset
1063 (list bibtex-key-in-head 'font-lock-constant-face nil t))
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
1064 ;; optional field names (treated as comments)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1065 (list
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1066 (concat "^[ \t]*\\(OPT" bibtex-field-name "\\)[ \t]*=")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1067 1 'font-lock-comment-face)
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
1068 ;; field names
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
1069 (list (concat "^[ \t]*\\(" bibtex-field-name "\\)[ \t]*=")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1070 1 'font-lock-variable-name-face))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1071 "*Default expressions to highlight in BibTeX mode.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1072
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1073 (defvar bibtex-field-name-for-parsing nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1074 "Temporary variable storing the name string to be parsed by the callback
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1075 function `bibtex-parse-field-name'.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1076
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1077 (defvar bibtex-sort-entry-class-alist
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1078 (let ((i -1) alist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1079 (dolist (class bibtex-sort-entry-class alist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1080 (setq i (1+ i))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1081 (dolist (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
1082 ;; all entry names should be downcase (for ease of comparison)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1083 (push (cons (if (stringp entry) (downcase entry) entry) i) alist))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1084 "Alist for the classes of the entry types if the value of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1085 `bibtex-maintain-sorted-entries' is `entry-class'.")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1086
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1087
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1088 ;; Special support taking care of variants
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1089 (defvar zmacs-regions)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1090 (if (boundp 'mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1091 (defun bibtex-mark-active ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1092 ;; In Emacs mark-active indicates if mark is active.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1093 mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1094 (defun bibtex-mark-active ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1095 ;; In XEmacs (mark) returns nil when not active.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1096 (if zmacs-regions (mark) (mark t))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1097
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1098 (if (fboundp 'run-with-idle-timer)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1099 ;; timer.el is distributed with Emacs
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1100 (fset 'bibtex-run-with-idle-timer 'run-with-idle-timer)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1101 ;; timer.el is not distributed with XEmacs
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1102 ;; Notice that this does not (yet) pass the arguments, but they
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1103 ;; are not used (yet) in bibtex.el. Fix if needed.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1104 (defun bibtex-run-with-idle-timer (secs repeat function &rest args)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1105 (start-itimer "bibtex" function secs (if repeat secs nil) t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1106
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1107
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1108 ;; Support for hideshow minor mode
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1109 (defun bibtex-hs-forward-sexp (arg)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1110 "Replacement for `forward-sexp' to be used by `hs-minor-mode'."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1111 (if (< arg 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1112 (backward-sexp 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1113 (if (looking-at "@\\S(*\\s(")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1114 (progn
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1115 (goto-char (match-end 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1116 (forward-char -1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1117 (forward-sexp 1))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1118 (forward-sexp 1))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1119
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1120 (add-to-list
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1121 'hs-special-modes-alist
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1122 '(bibtex-mode "@\\S(*\\s(" "\\s)" nil bibtex-hs-forward-sexp nil))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1123
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1124
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1125 (defconst bibtex-braced-string-syntax-table
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1126 (let ((st (make-syntax-table)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1127 (modify-syntax-entry ?\{ "(}" st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1128 (modify-syntax-entry ?\} "){" st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1129 (modify-syntax-entry ?\[ "." st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1130 (modify-syntax-entry ?\] "." st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1131 (modify-syntax-entry ?\( "." st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1132 (modify-syntax-entry ?\) "." st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1133 (modify-syntax-entry ?\\ "." st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1134 (modify-syntax-entry ?\" "." st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1135 st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1136 "Syntax-table to parse matched braces.")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1137
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1138 (defconst bibtex-quoted-string-syntax-table
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1139 (let ((st (make-syntax-table)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1140 (modify-syntax-entry ?\\ "\\" st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1141 (modify-syntax-entry ?\" "\"" st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1142 st)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1143 "Syntax-table to parse matched quotes.")
51415
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 (defun bibtex-parse-field-string ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1146 "Parse a field string enclosed by braces or quotes.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1147 If a syntactically correct string is found, a pair containing the start and
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1148 end position of the field string is returned, nil 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
1149 (let ((end-point
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1150 (or (and (eq (following-char) ?\")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1151 (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
1152 (with-syntax-table bibtex-quoted-string-syntax-table
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1153 (forward-sexp 1))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1154 (point)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1155 (and (eq (following-char) ?\{)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1156 (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
1157 (with-syntax-table bibtex-braced-string-syntax-table
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1158 (forward-sexp 1))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1159 (point))))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1160 (if end-point
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1161 (cons (point) end-point))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1162
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1163 (defun bibtex-parse-association (parse-lhs parse-rhs)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1164 "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
1165 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
1166 substrings. These functions are expected to return nil if parsing is not
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1167 successfull. If both functions return non-nil, a pair containing the returned
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1168 values of the functions PARSE-LHS and PARSE-RHS is returned."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1169 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1170 (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
1171 (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
1172 right)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1173 (if (and left
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1174 (looking-at "[ \t\n]*=[ \t\n]*")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1175 (goto-char (match-end 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1176 (setq right (funcall parse-rhs)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1177 (cons left right))))))
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 (defun bibtex-parse-field-name ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1180 "Parse the field name stored in `bibtex-field-name-for-parsing'.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1181 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
1182 very first character of the match, the actual starting position of the 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
1183 part and end position of the match. Move point to end of field name.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1184 If `bibtex-autoadd-commas' is non-nil add missing comma at end of preceeding
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1185 BibTeX field as necessary."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1186 (cond ((looking-at ",[ \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
1187 (let ((start (point)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1188 (goto-char (match-end 0))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1189 (when (looking-at bibtex-field-name-for-parsing)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1190 (goto-char (match-end 0))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1191 (list start (match-beginning 0) (match-end 0)))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1192 ;; 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
1193 ((and bibtex-autoadd-commas
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1194 (looking-at (concat "[ \t\n]*\\(?:" bibtex-field-name-for-parsing
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1195 "\\)[ \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
1196 (skip-chars-backward " \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
1197 (insert ",")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1198 (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
1199 ;; 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
1200 (bibtex-parse-field-name))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1201
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1202 (defun bibtex-parse-field-text ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1203 "Parse the text part of a BibTeX field.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1204 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
1205 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
1206 is found, a pair containing the start and end position of the text is
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1207 returned, nil otherwise. Move point to end of field text."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1208 (let ((starting-point (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1209 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
1210 (while (not (or end-point failure))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1211 (cond ((looking-at bibtex-field-const)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1212 (goto-char (match-end 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1213 ((setq boundaries (bibtex-parse-field-string))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1214 (goto-char (cdr boundaries)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1215 ((setq failure t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1216 (if (not (looking-at "[ \t\n]*#[ \t\n]*"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1217 (setq end-point (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1218 (goto-char (match-end 0))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1219 (if (and (not failure)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1220 end-point)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1221 (cons starting-point end-point))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1222
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1223 (defun bibtex-parse-field (name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1224 "Parse a BibTeX field of regexp NAME.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1225 If a syntactically correct field is found, a pair containing the boundaries of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1226 the name and text parts of the field is returned."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1227 (let ((bibtex-field-name-for-parsing name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1228 (bibtex-parse-association 'bibtex-parse-field-name
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1229 'bibtex-parse-field-text)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1230
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1231 (defun bibtex-search-forward-field (name &optional bound)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1232 "Search forward to find a field of name NAME.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1233 If a syntactically correct field is found, a pair containing the boundaries of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1234 the name and text parts of the field is returned. The search is limited by
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1235 optional arg BOUND. If BOUND is t the search is limited by the end of the current
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1236 entry. Do not move point."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1237 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1238 (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
1239 (unless (integer-or-marker-p bound)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1240 (setq bound (if bound
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1241 (save-excursion (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
1242 (point-max))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1243 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1244 (bibtex-field-name-for-parsing name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1245 boundaries temp-boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1246 (while (and (not boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1247 (< (point) bound)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1248 (search-forward "," bound t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1249 (goto-char (match-beginning 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1250 (if (and (setq temp-boundaries
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1251 (bibtex-parse-association 'bibtex-parse-field-name
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1252 'bibtex-parse-field-text))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1253 (<= (cddr temp-boundaries) bound))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1254 (setq boundaries temp-boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1255 (forward-char 1)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1256 boundaries))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1257
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1258 (defun bibtex-search-backward-field (name &optional bound)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1259 "Search backward to find a field of name NAME.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1260 If a syntactically correct field is found, a pair containing the boundaries of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1261 the name and text parts of the field is returned. The search is limited by
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1262 optional arg BOUND. If BOUND is t the search is limited by the beginning of the
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1263 current entry. Do not move point."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1264 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1265 (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
1266 (unless (integer-or-marker-p bound)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1267 (setq bound (if bound
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1268 (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
1269 (point-min))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1270 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1271 (bibtex-field-name-for-parsing name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1272 boundaries temp-boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1273 (while (and (not boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1274 (>= (point) bound)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1275 (search-backward "," bound t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1276 (if (setq temp-boundaries
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1277 (bibtex-parse-association 'bibtex-parse-field-name
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1278 'bibtex-parse-field-text))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1279 (setq boundaries temp-boundaries)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1280 boundaries))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1281
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1282 (defsubst bibtex-start-of-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1283 (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
1284 (defsubst bibtex-start-of-name-in-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1285 (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
1286 (defsubst bibtex-end-of-name-in-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1287 (nth 2 (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
1288 (defsubst bibtex-end-of-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1289 (cddr 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
1290 (defsubst bibtex-start-of-text-in-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1291 (cadr 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
1292 (defsubst bibtex-end-of-text-in-field (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1293 (cddr bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1294
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1295 (defun bibtex-name-in-field (bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1296 "Get content of name in BibTeX field defined via BOUNDS."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1297 (buffer-substring-no-properties (nth 1 (car bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1298 (nth 2 (car bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1299
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1300 (defun bibtex-text-in-field-bounds (bounds &optional remove-delim)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1301 "Get content of text in BibTeX field defined via BOUNDS.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1302 If optional arg REMOVE-DELIM is non-nil remove enclosing field delimiters
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1303 if present."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1304 (let ((content (buffer-substring-no-properties (cadr bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1305 (cddr bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1306 (if (and remove-delim
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1307 (string-match "\\`[{\"]\\(.*\\)[}\"]\\'" content))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1308 (substring content (match-beginning 1) (match-end 1))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1309 content)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1310
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1311 (defun bibtex-text-in-field (field &optional follow-crossref)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1312 "Get content of field FIELD of current BibTeX entry. Return nil if not found.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1313 If optional arg FOLLOW-CROSSREF is non-nil, follow crossref."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1314 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1315 (save-restriction
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1316 ;; We want to jump back and forth while searching FIELD
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1317 (bibtex-narrow-to-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1318 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1319 (let ((bounds (bibtex-search-forward-field field))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1320 crossref-field)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1321 (cond (bounds (bibtex-text-in-field-bounds bounds t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1322 ((and follow-crossref
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1323 (progn (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1324 (setq bounds (bibtex-search-forward-field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1325 "\\(OPT\\)?crossref"))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1326 (setq crossref-field (bibtex-text-in-field-bounds bounds t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1327 (widen)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1328 (if (bibtex-find-crossref crossref-field)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1329 ;; Do not pass FOLLOW-CROSSREF because we want
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1330 ;; to follow crossrefs only one level of recursion.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1331 (bibtex-text-in-field field))))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1332
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1333 (defun bibtex-parse-string-prefix ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1334 "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
1335 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
1336 the very first character of the match, the actual starting position of the
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1337 reference key and the end position of the match."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1338 (let ((case-fold-search t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1339 (if (looking-at "^[ \t]*@string[ \t\n]*[({][ \t\n]*")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1340 (let ((start (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1341 (goto-char (match-end 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1342 (when (looking-at bibtex-reference-key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1343 (goto-char (match-end 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1344 (list start
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1345 (match-beginning 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1346 (match-end 0)))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1347
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1348 (defun bibtex-parse-string-postfix ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1349 "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
1350 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
1351 the actual starting and ending position of the text and the very last
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1352 character of the string entry. Move point past BibTeX string entry."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1353 (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
1354 (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
1355 (when bounds
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1356 (goto-char (cdr bounds))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1357 (when (looking-at "[ \t\n]*[})]")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1358 (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
1359 (list (car bounds)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1360 (cdr bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1361 (match-end 0))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1362
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1363 (defun bibtex-parse-string ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1364 "Parse a BibTeX string entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1365 If a syntactically correct entry is found, a pair containing the boundaries of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1366 the reference key and text parts of the entry is returned.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1367 Move point past BibTeX string entry."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1368 (bibtex-parse-association 'bibtex-parse-string-prefix
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1369 'bibtex-parse-string-postfix))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1370
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1371 (defun bibtex-search-forward-string ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1372 "Search forward to find a BibTeX string entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1373 If a syntactically correct entry is found, a pair containing the boundaries of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1374 the reference key and text parts of the string is returned. Do not move point."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1375 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1376 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1377 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1378 boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1379 (while (and (not boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1380 (search-forward-regexp
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1381 "^[ \t]*@string[ \t\n]*[({][ \t\n]*" nil t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1382 (goto-char (match-beginning 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1383 (unless (setq boundaries (bibtex-parse-string))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1384 (forward-char 1)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1385 boundaries))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1386
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1387 (defun bibtex-search-backward-string ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1388 "Search backward to find a BibTeX string entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1389 If a syntactically correct entry is found, a pair containing the boundaries of
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1390 the reference key and text parts of the field is returned. Do not move point."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1391 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1392 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1393 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1394 boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1395 (while (and (not boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1396 (search-backward-regexp
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1397 "^[ \t]*@string[ \t\n]*[({][ \t\n]*" nil t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1398 (goto-char (match-beginning 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1399 (setq boundaries (bibtex-parse-string)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1400 boundaries))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1401
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1402 (defun bibtex-reference-key-in-string (bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1403 (buffer-substring-no-properties (nth 1 (car bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1404 (nth 2 (car bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1405
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1406 (defun bibtex-text-in-string (bounds &optional remove-delim)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1407 "Get content of text in BibTeX string field defined via BOUNDS.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1408 If optional arg REMOVE-DELIM is non-nil remove enclosing field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1409 delimiters if present."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1410 (let ((content (buffer-substring-no-properties (nth 0 (cdr bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1411 (nth 1 (cdr bounds)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1412 (if (and remove-delim
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1413 (string-match "\\`{\\(.*\\)}\\'" content))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1414 (substring content (match-beginning 1) (match-end 1))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1415 content)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1416
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-text-in-string (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1418 (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
1419 (defsubst bibtex-end-of-text-in-string (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1420 (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
1421 (defsubst bibtex-end-of-string (bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1422 (nth 2 (cdr bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1423
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1424 (defsubst bibtex-type-in-head ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1425 "Extract BibTeX type in head."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1426 ;; ignore @
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1427 (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
1428 (match-end bibtex-type-in-head)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1429
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1430 (defun bibtex-key-in-head (&optional empty)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1431 "Extract BibTeX key in head. Return optional arg EMPTY if key is empty."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1432 (if (match-beginning bibtex-key-in-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1433 (buffer-substring-no-properties (match-beginning bibtex-key-in-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1434 (match-end bibtex-key-in-head))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1435 empty))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1436
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
1437 ;; 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
1438
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1439 (defun bibtex-delete-whitespace ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1440 "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
1441 (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
1442 (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
1443
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1444 (defun bibtex-current-line ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1445 "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
1446 (+ (count-lines 1 (point))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1447 (if (equal (current-column) 0) 1 0)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1448
17700
d28dbbfabfb1 (assoc-ignore-case): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 15852
diff changeset
1449 (defun bibtex-member-of-regexp (string list)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1450 "Return non-nil if STRING is exactly matched by an element of LIST.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1451 The value is actually the tail of LIST whose car matches STRING."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1452 (let (case-fold-search)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1453 (while (and list
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
1454 (not (string-match (concat "\\`\\(?:" (car list) "\\)\\'") string)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1455 (setq list (cdr list)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1456 list))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1458 (defun bibtex-assoc-of-regexp (string alist)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1459 "Return non-nil if STRING is exactly matched by the car of an
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1460 element of ALIST (case ignored). The value is actually the element
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1461 of LIST whose car matches STRING."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1462 (let ((case-fold-search t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1463 (while (and alist
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
1464 (not (string-match (concat "\\`\\(?:" (caar alist) "\\)\\'") string)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1465 (setq alist (cdr alist)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1466 (car alist)))
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1467
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1468 (defun bibtex-skip-to-valid-entry (&optional backward)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1469 "Unless at beginning of a valid BibTeX entry, move point to beginning of the
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1470 next valid one. With optional argument BACKWARD non-nil, move backward to
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1471 beginning of previous valid one. A valid entry is a syntactical correct one
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1472 with type contained in `bibtex-entry-field-alist' or, if
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1473 `bibtex-sort-ignore-string-entries' is nil, a syntactical correct 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
1474 entry. Return buffer position of beginning and ending of entry if a valid
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1475 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
1476 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1477 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1478 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
1479 (while (not (or found (if backward (bobp) (eobp))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1480 (let ((pnt (point))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1481 bounds)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1482 (cond ((or (and (looking-at bibtex-valid-entry-re)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1483 (setq found (bibtex-search-entry nil nil t))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1484 (equal (match-beginning 0) pnt))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1485 (and (not bibtex-sort-ignore-string-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
1486 (setq bounds (bibtex-parse-string))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1487 (setq found (cons (bibtex-start-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
1488 (bibtex-end-of-string bounds)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1489 (goto-char pnt))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1490 (backward
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1491 (if (re-search-backward "^[ \t]*\\(@\\)" nil 'move)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1492 (goto-char (match-beginning 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
1493 (t (if (re-search-forward "\n[ \t]*@" nil 'move)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1494 (forward-char -1))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1495 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
1496
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
1497 (defun bibtex-map-entries (fun)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1498 "Call FUN for each BibTeX entry starting with the current.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1499 Do this to the end of the file. FUN is called with three arguments, the key of
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1500 the entry and the buffer positions (marker) of beginning and 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
1501 Point is inside the entry. If `bibtex-sort-ignore-string-entries' is non-nil,
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1502 FUN will not be called for @String entries."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1503 (let ((case-fold-search t))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1504 (bibtex-beginning-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
1505 (while (re-search-forward bibtex-entry-head nil t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1506 (let ((entry-type (bibtex-type-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
1507 (key (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
1508 (beg (copy-marker (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
1509 (end (copy-marker (save-excursion (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
1510 (save-excursion
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1511 (if (or (and (not bibtex-sort-ignore-string-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
1512 (string-equal "string" (downcase entry-type)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1513 (assoc-ignore-case entry-type bibtex-entry-field-alist))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1514 (funcall fun key beg end)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1515 (goto-char end)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1516
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1517 (defun bibtex-progress-message (&optional flag interval)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1518 "Echo a message about progress of current buffer.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1519 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
1520 value for INTERVAL may be given as well (if not this is set to 5)).
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1521 If FLAG is done, the message is deinitialized.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1522 If FLAG is absent, a message is echoed if point was incremented
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1523 at least INTERVAL percent since last message was echoed."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1524 (cond ((stringp flag)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1525 (setq bibtex-progress-lastmes flag)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1526 (setq bibtex-progress-interval (or interval 5)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1527 bibtex-progress-lastperc 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1528 ((equal flag 'done)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1529 (message "%s (done)" bibtex-progress-lastmes)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1530 (setq bibtex-progress-lastmes nil))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1531 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1532 (let* ((size (- (point-max) (point-min)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1533 (perc (if (= size 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1534 100
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1535 (/ (* 100 (- (point) (point-min))) size))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1536 (when (>= perc (+ bibtex-progress-lastperc
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1537 bibtex-progress-interval))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1538 (setq bibtex-progress-lastperc perc)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1539 (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
1540
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1541 (defun bibtex-field-left-delimiter ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1542 "Return a string dependent on `bibtex-field-delimiters'."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1543 (if (equal bibtex-field-delimiters 'braces)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1544 "{"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1545 "\""))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1546
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1547 (defun bibtex-field-right-delimiter ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1548 "Return a string dependent on `bibtex-field-delimiters'."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1549 (if (equal bibtex-field-delimiters 'braces)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1550 "}"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1551 "\""))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1552
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1553 (defun bibtex-entry-left-delimiter ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1554 "Return a string dependent on `bibtex-field-delimiters'."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1555 (if (equal bibtex-entry-delimiters 'braces)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1556 "{"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1557 "("))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1558
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1559 (defun bibtex-entry-right-delimiter ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1560 "Return a string dependent on `bibtex-field-delimiters'."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1561 (if (equal bibtex-entry-delimiters 'braces)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1562 "}"
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1563 ")"))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1564
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1565 (defun bibtex-search-entry (empty-head &optional bound noerror backward)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1566 "Search for a BibTeX entry (maybe without reference key if EMPTY-HEAD is t).
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1567 BOUND and NOERROR are exactly as in `re-search-forward'. If BACKWARD
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1568 is non-nil, search is done in reverse direction. Point is moved past the
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1569 closing delimiter (at the beginning of entry if BACKWARD is non-nil).
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1570 Return a cons pair with buffer positions of beginning and 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
1571 After call to this function MATCH-BEGINNING and MATCH-END functions
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1572 are defined, but only for the head part of the entry
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1573 \(especially (match-end 0) just gives the end of the head part)."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1574 (let ((pnt (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
1575 (entry-head-re (if empty-head
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1576 bibtex-entry-maybe-empty-head
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1577 bibtex-entry-head)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1578 (if backward
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1579 (let (found)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1580 (while (and (not 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
1581 (re-search-backward entry-head-re bound noerror))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1582 (setq found (bibtex-search-entry empty-head pnt t)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1583 (if 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
1584 (progn (goto-char (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
1585 found)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1586 (cond ((equal noerror nil)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1587 ;; yell
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1588 (error "Backward search of BibTeX entry failed"))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1589 ((equal noerror t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1590 ;; don't move
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1591 (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
1592 nil))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1593 (let ((limit (or bound (point-max)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1594 found)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1595 (while (and (not 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
1596 (re-search-forward entry-head-re bound noerror))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1597 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1598 (let ((entry-closer
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1599 (if (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1600 (goto-char (match-end bibtex-type-in-head))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1601 (looking-at "[ \t]*("))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1602 ;; entry opened with parenthesis
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1603 ?\)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1604 ?\}))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1605 (infix-start (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1606 finished bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1607 (while (not finished)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1608 (skip-chars-forward " \t\n" limit)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1609 (if (and (setq bounds (bibtex-parse-field bibtex-field-name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1610 (<= (bibtex-end-of-field bounds) limit))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1611 (setq infix-start (bibtex-end-of-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1612 (setq finished t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1613 (goto-char infix-start))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1614 ;; This matches the infix* part. The AND construction assures
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1615 ;; that BOUND is respected.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1616 (when (and (looking-at bibtex-entry-postfix)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1617 (eq (char-before (match-end 0)) entry-closer)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1618 (<= (match-end 0) limit))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1619 (goto-char (match-end 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1620 (setq found t)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1621 (if 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
1622 (cons (match-beginning 0) (point))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1623 (cond ((not noerror)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1624 ;; yell
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1625 (error "Search of BibTeX entry failed"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1626 ((equal noerror t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1627 ;; don't move
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1628 (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
1629 nil)))))
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1630
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1631 (defun bibtex-flash-head ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1632 "Flash at BibTeX entry head before point, if exists."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1633 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1634 flash)
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1635 (cond ((re-search-backward bibtex-entry-head nil t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1636 (goto-char (match-beginning bibtex-type-in-head))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1637 (setq flash (match-end bibtex-key-in-head)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1638 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1639 (end-of-line)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1640 (skip-chars-backward " \t")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1641 (setq flash (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1642 (beginning-of-line)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1643 (skip-chars-forward " \t")))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1644 (if (pos-visible-in-window-p (point))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1645 (sit-for 1)
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1646 (message "From: %s"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1647 (buffer-substring (point) flash)))))
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1648
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1649 (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
1650 "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
1651 (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
1652 (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
1653 (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
1654
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1655 (defun bibtex-move-outside-of-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1656 "Make sure point is outside of a BibTeX entry."
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
1657 (let ((orig-point (point)))
26711
eac840d283b6 (bibtex-hs-forward-sexp): Added to support
Gerd Moellmann <gerd@gnu.org>
parents: 25444
diff changeset
1658 (bibtex-end-of-entry)
52891
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1659 (when (< (point) orig-point)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1660 ;; 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
1661 ;; Leave point at the beginning of a line, and preferably
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1662 ;; at the beginning of a paragraph.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1663 (goto-char orig-point)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1664 (beginning-of-line 1)
52891
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1665 (unless (= ?\n (char-before (1- (point))))
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1666 (re-search-forward "^[ \t]*[@\n]" nil 'move)
a6806242012a (bibtex-move-outside-of-entry):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1667 (backward-char 1)))
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
1668 (skip-chars-forward " \t\n")))
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1669
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1670 (defun bibtex-beginning-of-first-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1671 "Go to the beginning of the first BibTeX entry in buffer. Return point."
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
1672 (goto-char (point-min))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1673 (if (re-search-forward "^[ \t]*@" nil 'move)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1674 (beginning-of-line))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1675 (point))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1676
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1677 (defun bibtex-beginning-of-last-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1678 "Go to the beginning of the last BibTeX entry in buffer."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1679 (goto-char (point-max))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1680 (if (re-search-backward "^[ \t]*@" nil 'move)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1681 (beginning-of-line))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1682 (point))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1683
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1684 (defun bibtex-inside-field ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1685 "Try to avoid point being at end of a BibTeX field."
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1686 (end-of-line)
13728
4b7903cfa7ee (bibtex-auto-fill-function): Adapted for use with
Karl Heuer <kwzh@gnu.org>
parents: 12770
diff changeset
1687 (skip-chars-backward " \t")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1688 (cond ((= (preceding-char) ?,)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1689 (forward-char -2)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1690 (cond ((or (= (preceding-char) ?})
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1691 (= (preceding-char) ?\"))
13728
4b7903cfa7ee (bibtex-auto-fill-function): Adapted for use with
Karl Heuer <kwzh@gnu.org>
parents: 12770
diff changeset
1692 (forward-char -1))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1693
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1694 (defun bibtex-enclosing-field (&optional noerr)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1695 "Search for BibTeX field enclosing point. Point moves to end of field.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1696 Use `match-beginning' and `match-end' to parse the field. If NOERR is non-nil,
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1697 no error is signalled. In this case, bounds are returned on success,
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1698 nil 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
1699 (let ((bounds (bibtex-search-backward-field bibtex-field-name t)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1700 (if (and 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
1701 (<= (bibtex-start-of-field bounds) (point))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1702 (>= (bibtex-end-of-field bounds) (point)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1703 bounds
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1704 (unless noerr
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1705 (error "Can't find enclosing BibTeX field")))))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1706
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1707 (defun bibtex-enclosing-entry-maybe-empty-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
1708 "Search for BibTeX entry enclosing point. Move point to end of entry.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1709 Beginning (but not end) of entry is given by (`match-beginning' 0)."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1710 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1711 (old-point (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1712 (unless (re-search-backward bibtex-entry-maybe-empty-head 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
1713 (goto-char old-point)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1714 (error "Can't find beginning of enclosing BibTeX entry"))
13728
4b7903cfa7ee (bibtex-auto-fill-function): Adapted for use with
Karl Heuer <kwzh@gnu.org>
parents: 12770
diff changeset
1715 (goto-char (match-beginning bibtex-type-in-head))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1716 (unless (bibtex-search-entry t 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
1717 (goto-char old-point)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1718 (error "Can't find end of enclosing BibTeX entry"))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1719
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1720 (defun bibtex-insert-current-kill (n)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1721 (if (not bibtex-last-kill-command)
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
1722 (error "BibTeX kill ring is empty")
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1723 (let* ((kr (if (equal 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
1724 'bibtex-field-kill-ring
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1725 'bibtex-entry-kill-ring))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1726 (kryp (if (equal 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
1727 'bibtex-field-kill-ring-yank-pointer
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1728 'bibtex-entry-kill-ring-yank-pointer))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1729 (ARGth-kill-element (nthcdr (mod (- n (length (eval kryp)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1730 (length (eval kr)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1731 (eval kr)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1732 (current (car (set kryp ARGth-kill-element))))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1733 (cond
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1734 ((equal 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
1735 (let (bibtex-help-message)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1736 (bibtex-find-text nil t)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1737 (if (looking-at "[}\"]")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1738 (forward-char)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1739 (set-mark (point))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1740 (message "Mark set")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1741 (bibtex-make-field (list (elt current 1) nil (elt current 2)) t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1742 ((equal 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
1743 (if (not (eobp))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1744 (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
1745 (set-mark (point))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1746 (message "Mark set")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1747 (insert (elt current 1)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1748 (t
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1749 (error "Unknown tag field: %s. Please submit a bug report"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1750 bibtex-last-kill-command))))))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
1751
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1752 (defun bibtex-format-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1753 "Helper function for `bibtex-clean-entry'.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1754 Formats current entry according to variable `bibtex-entry-format'."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1755 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1756 (save-restriction
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1757 (bibtex-narrow-to-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1758 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1759 (format (if (equal bibtex-entry-format t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1760 '(realign opts-or-alts required-fields
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1761 numerical-fields
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1762 last-comma page-dashes delimiters
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1763 unify-case inherit-booktitle)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1764 bibtex-entry-format))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1765 crossref-key bounds alternatives-there non-empty-alternative
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1766 entry-list req creq field-done field-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1767
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1768 ;; identify entry type
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1769 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1770 (re-search-forward bibtex-entry-type)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1771 (let ((beg-type (1+ (match-beginning 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1772 (end-type (match-end 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1773 (setq entry-list (assoc-ignore-case (buffer-substring-no-properties
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1774 beg-type end-type)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1775 bibtex-entry-field-alist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1776 req (nth 0 (nth 1 entry-list)) ; required part
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1777 creq (nth 0 (nth 2 entry-list))) ; crossref part
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1778
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1779 ;; unify case of entry name
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1780 (when (memq 'unify-case format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1781 (delete-region beg-type end-type)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1782 (insert (car entry-list)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1783
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1784 ;; update left entry delimiter
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1785 (when (memq 'delimiters format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1786 (goto-char end-type)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1787 (skip-chars-forward " \t\n")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1788 (delete-char 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1789 (insert (bibtex-entry-left-delimiter))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1790
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1791 ;; determine if entry has crossref field and if at least
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1792 ;; one alternative is non-empty
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1793 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1794 (while (setq bounds (bibtex-search-forward-field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1795 bibtex-field-name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1796 (goto-char (bibtex-start-of-name-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1797 (cond ((looking-at "ALT")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1798 (setq alternatives-there t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1799 (goto-char (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1800 (if (not (looking-at bibtex-empty-field-re))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1801 (setq non-empty-alternative t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1802 ((and (looking-at "\\(OPT\\)?crossref\\>")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1803 (progn (goto-char (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1804 (not (looking-at bibtex-empty-field-re))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1805 (setq crossref-key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1806 (bibtex-text-in-field-bounds bounds t))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1807 (goto-char (bibtex-end-of-field bounds)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1808 (if (and alternatives-there
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1809 (not non-empty-alternative)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1810 (memq 'required-fields format))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1811 (error "All alternatives are empty"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1812
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1813 ;; process all fields
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1814 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1815 (while (setq bounds (bibtex-search-forward-field bibtex-field-name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1816 (let* ((beg-field (copy-marker (bibtex-start-of-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1817 (end-field (copy-marker (bibtex-end-of-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1818 (beg-name (copy-marker (bibtex-start-of-name-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1819 (end-name (copy-marker (bibtex-end-of-name-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1820 (beg-text (copy-marker (bibtex-start-of-text-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1821 (end-text (copy-marker (bibtex-end-of-text-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1822 (opt-alt (string-match "OPT\\|ALT"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1823 (buffer-substring-no-properties beg-name (+ beg-name 3))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1824 (field-name (buffer-substring-no-properties
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1825 (if opt-alt (+ beg-name 3) beg-name) end-name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1826 (empty-field (string-match bibtex-empty-field-re
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1827 (buffer-substring-no-properties beg-field end-field)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1828 deleted)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1829
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1830 ;; We have more elegant high-level functions for several
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1831 ;; tasks done by bibtex-format-entry. However, they contain
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1832 ;; quite some redundancy compared with what we need to do
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1833 ;; anyway. So for speed-up we avoid using them.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1834
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1835 (when (and opt-alt
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1836 (memq 'opts-or-alts format))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1837 (if empty-field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1838 ;; Either it is an empty ALT field. Then we have checked
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1839 ;; already that we have one non-empty alternative.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1840 ;; Or it is an empty OPT field that we do not miss anyway.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1841 ;; So we can safely delete this field.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1842 (progn (delete-region beg-field end-field)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1843 (setq deleted t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1844 ;; otherwise: not empty, delete "OPT" or "ALT"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1845 (goto-char beg-name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1846 (delete-char 3)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1847
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1848 (unless deleted
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1849 (push field-name field-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1850
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1851 ;; remove delimiters from purely numerical fields
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1852 (when (and (memq 'numerical-fields format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1853 (progn (goto-char beg-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1854 (looking-at "\\(\"[0-9]+\"\\)\\|\\({[0-9]+}\\)")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1855 (goto-char end-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1856 (delete-char -1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1857 (goto-char beg-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1858 (delete-char 1))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1859
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1860 ;; update delimiters
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1861 (when (memq 'delimiters format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1862 (goto-char beg-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1863 (when (looking-at "[{\"]")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1864 (delete-char 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1865 (insert (bibtex-field-left-delimiter)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1866 (goto-char (1- (marker-position end-text)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1867 (when (looking-at "[}\"]")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1868 (delete-char 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1869 (insert (bibtex-field-right-delimiter))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1870
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1871 ;; update page dashes
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1872 (if (and (memq 'page-dashes format)
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
1873 (string-match "\\`\\(OPT\\)?pages\\'" field-name)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1874 (progn (goto-char beg-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1875 (looking-at
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1876 "\\([\"{][0-9]+\\)[ \t\n]*--?[ \t\n]*\\([0-9]+[\"}]\\)")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1877 (replace-match "\\1-\\2"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1878
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1879 ;; use book title of crossref'd entry
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1880 (if (and (memq 'inherit-booktitle 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
1881 empty-field
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1882 (equal (downcase field-name) "booktitle")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1883 crossref-key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1884 (let ((title (save-restriction
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1885 (widen)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1886 (if (bibtex-find-entry crossref-key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1887 (bibtex-text-in-field "title")))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1888 (when title
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1889 (setq empty-field nil)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1890 (goto-char (1+ beg-text))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1891 (insert title))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1892
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1893 ;; Use booktitle to set a missing title.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1894 (if (and empty-field
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1895 (equal (downcase field-name) "title"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1896 (let ((booktitle (bibtex-text-in-field "booktitle")))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1897 (when booktitle
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1898 (setq empty-field nil)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1899 (goto-char (1+ beg-text))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
1900 (insert booktitle))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1901
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1902 ;; if empty field, complain
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1903 (if (and empty-field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1904 (memq 'required-fields format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1905 (assoc-ignore-case field-name
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1906 (if crossref-key creq req)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1907 (error "Mandatory field `%s' is empty" field-name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1908
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1909 ;; unify case of field name
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1910 (if (memq 'unify-case format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1911 (let ((fname (car (assoc-ignore-case
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1912 field-name (append (nth 0 (nth 1 entry-list))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1913 (nth 1 (nth 1 entry-list))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1914 bibtex-user-optional-fields)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1915 (if fname
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1916 (progn
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1917 (delete-region beg-name end-name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1918 (goto-char beg-name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1919 (insert fname))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1920 ;; there are no rules we could follow
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1921 (downcase-region beg-name end-name))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1922
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1923 ;; update point
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1924 (goto-char end-field))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1925
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1926 ;; check whether all required fields are present
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1927 (if (memq 'required-fields format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1928 (let (altlist (found 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1929 (dolist (fname (if crossref-key creq req))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1930 (if (nth 3 fname)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1931 (push (car fname) altlist))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1932 (unless (or (member (car fname) field-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1933 (nth 3 fname))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1934 (error "Mandatory field `%s' is missing" (car fname))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1935 (when altlist
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1936 (dolist (fname altlist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1937 (if (member fname field-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1938 (setq found (1+ found))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1939 (cond ((= found 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1940 (error "Alternative mandatory field `%s' is missing"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1941 altlist))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1942 ((> found 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1943 (error "Alternative fields `%s' is defined %s times"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1944 altlist found))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1945
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1946 ;; update point
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1947 (if (looking-at (bibtex-field-right-delimiter))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1948 (forward-char))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1949
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1950 ;; update comma after last field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1951 (if (memq 'last-comma format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1952 (cond ((and bibtex-comma-after-last-field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1953 (not (looking-at ",")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1954 (insert ","))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1955 ((and (not bibtex-comma-after-last-field)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1956 (looking-at ","))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1957 (delete-char 1))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1958
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1959 ;; update right entry delimiter
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1960 (if (looking-at ",")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1961 (forward-char))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1962 (when (memq 'delimiters format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1963 (skip-chars-forward " \t\n")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1964 (delete-char 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1965 (insert (bibtex-entry-right-delimiter)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1966
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1967 ;; fill entry
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1968 (if (memq 'realign format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1969 (bibtex-fill-entry))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1970
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1971
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
1972 (defun bibtex-autokey-abbrev (string len)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1973 "Return an abbreviation of STRING with at least LEN characters.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1974 If LEN is positive the abbreviation is terminated only after a consonant
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1975 or at the word end. If LEN is negative the abbreviation is strictly
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1976 enforced using abs (LEN) characters. If LEN is not a number, STRING
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1977 is returned unchanged."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1978 (cond ((or (not (numberp len))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1979 (<= (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
1980 string)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1981 ((equal len 0)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
1982 "")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1983 ((< len 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1984 (substring string 0 (abs len)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1985 (t (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1986 (abort-char (string-match "[^aeiou]" string (1- len))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1987 (if abort-char
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1988 (substring string 0 (1+ abort-char))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1989 string)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1990
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1991 (defun bibtex-autokey-get-field (field &optional change-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1992 "Get content of BibTeX field FIELD. Return empty string if not found.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1993 Optional arg CHANGE-LIST is a list of substitution patterns that is
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1994 applied to the content of FIELD. It is an alist with pairs
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1995 \(OLD-REGEXP . NEW-STRING\)."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1996 (let ((content (bibtex-text-in-field field bibtex-autokey-use-crossref))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1997 case-fold-search)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1998 (unless content (setq content ""))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
1999 (dolist (pattern change-list content)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2000 (setq content (replace-regexp-in-string (car pattern)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2001 (cdr pattern)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2002 content)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2003
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2004 (defun bibtex-autokey-get-names ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2005 "Get contents of the name field of the current entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2006 Do some modifications based on `bibtex-autokey-name-change-strings'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2007 and return results as a list."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2008 (let ((case-fold-search t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2009 (mapcar 'bibtex-autokey-demangle-name
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2010 (split-string (bibtex-autokey-get-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
2011 "author\\|editor"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2012 bibtex-autokey-name-change-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
2013 "[ \t\n]+and[ \t\n]+"))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2014
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2015 (defun bibtex-autokey-demangle-name (fullname)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2016 "Get the last part from a well-formed name 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
2017 (let* (case-fold-search
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2018 (name (cond ((string-match "\\([A-Z][^, ]*\\)[^,]*," fullname)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2019 ;; Name is of the form "von Last, First" or
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2020 ;; "von Last, Jr, First"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2021 ;; --> 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
2022 (match-string 1 fullname))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2023 ((string-match "\\([^, ]*\\)," fullname)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2024 ;; Strange name: we have a comma, but nothing capital
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2025 ;; 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
2026 (match-string 1 fullname))
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2027 ((string-match "\\(\\<[a-z][^ ]* +\\)+\\([A-Z][^ ]*\\)"
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2028 fullname)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2029 ;; name is of the form "First von Last", "von Last",
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2030 ;; "First von von Last", or "d'Last"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2031 ;; --> 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
2032 (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
2033 ((string-match "\\([^ ]+\\) *\\'" fullname)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2034 ;; name is of the form "First Middle Last" or "Last"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2035 ;; --> 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
2036 (match-string 1 fullname))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2037 (t (error "Name `%s' is incorrectly formed" fullname)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2038 (bibtex-autokey-abbrev
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2039 (funcall bibtex-autokey-name-case-convert name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2040 bibtex-autokey-name-length)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2041
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2042 (defun bibtex-autokey-get-title ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2043 "Get title field contents up to a terminator."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2044 (let ((titlestring
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2045 (bibtex-autokey-get-field "title"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2046 bibtex-autokey-titleword-change-strings)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2047 ;; ignore everything past a terminator
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2048 (let ((case-fold-search t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2049 (dolist (terminator bibtex-autokey-title-terminators)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2050 (if (string-match terminator titlestring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2051 (setq titlestring (substring titlestring 0 (match-beginning 0))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2052 ;; gather words from titlestring into a list. Ignore
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2053 ;; specific words and use only a specific amount of words.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2054 (let (case-fold-search titlewords titlewords-extra titleword end-match
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2055 (counter 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2056 (while (and (or (not (numberp bibtex-autokey-titlewords))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2057 (< counter (+ bibtex-autokey-titlewords
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2058 bibtex-autokey-titlewords-stretch)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2059 (string-match "\\b\\w+" titlestring))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2060 (setq end-match (match-end 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2061 titleword (substring titlestring
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2062 (match-beginning 0) end-match))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2063 (unless (bibtex-member-of-regexp titleword
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2064 bibtex-autokey-titleword-ignore)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2065 (setq titleword
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2066 (funcall bibtex-autokey-titleword-case-convert titleword))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2067 (if (or (not (numberp bibtex-autokey-titlewords))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2068 (< counter bibtex-autokey-titlewords))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2069 (setq titlewords (append titlewords (list titleword)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2070 (setq titlewords-extra
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2071 (append titlewords-extra (list titleword))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2072 (setq counter (1+ counter)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2073 (setq titlestring (substring titlestring end-match)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2074 (unless (string-match "\\b\\w+" titlestring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2075 (setq titlewords (append titlewords titlewords-extra)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2076 (mapcar 'bibtex-autokey-demangle-title titlewords))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2077
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2078 (defun bibtex-autokey-demangle-title (titleword)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2079 "Do some abbreviations on TITLEWORD.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2080 The rules are defined in `bibtex-autokey-titleword-abbrevs'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2081 and `bibtex-autokey-titleword-length'."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2082 (let ((abbrev (bibtex-assoc-of-regexp
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2083 titleword bibtex-autokey-titleword-abbrevs)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2084 (if abbrev
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2085 (cdr abbrev)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2086 (bibtex-autokey-abbrev titleword
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2087 bibtex-autokey-titleword-length))))
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
2088
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
2089 (defun bibtex-generate-autokey ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2090 "Generate automatically a key from the author/editor and the title field.
20446
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2091 This will only work for entries where each field begins on a separate line.
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2092 The generation algorithm works as follows:
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2093 1. Use the value of `bibtex-autokey-prefix-string' as a prefix.
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2094 2. If there is a non-empty author (preferred) or editor field,
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2095 use it as the name part of the key.
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2096 3. Change any substring found in
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2097 `bibtex-autokey-name-change-strings' to the corresponding new
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2098 one (see documentation of this variable for further detail).
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2099 4. For every of at least first `bibtex-autokey-names' names in
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2100 the name field, determine the last name. If there are maximal
20446
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2101 `bibtex-autokey-names' + `bibtex-autokey-names-stretch'
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2102 names, all names are used.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2103 5. From every last name, take at least `bibtex-autokey-name-length'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2104 characters (abort only after a consonant or at a word end).
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2105 6. Convert all last names according to the conversion function
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2106 `bibtex-autokey-name-case-convert'.
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2107 7. Build the name part of the key by concatenating all
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2108 abbreviated last names with the string
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2109 `bibtex-autokey-name-separator' between any two. If there are
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2110 more names than are used in the name part, prepend the string
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2111 contained in `bibtex-autokey-additional-names'.
20446
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2112 8. Build the year part of the key by truncating the contents of
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2113 the year field to the rightmost `bibtex-autokey-year-length'
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2114 digits (useful values are 2 and 4). If the year field (or any
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2115 other field required to generate the key) is absent, but the entry
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2116 has a valid crossref field and the variable
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2117 `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
2118 crossreferenced entry instead.
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2119 9. For the title part of the key change the contents of the
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
2120 title field of the entry according to
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2121 `bibtex-autokey-titleword-change-strings' to the
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2122 corresponding new one (see documentation of this variable for
20446
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2123 further detail).
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2124 10. Abbreviate the result to the string up to (but not including)
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2125 the first occurrence of a regexp matched by the items of
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2126 `bibtex-autokey-title-terminators' and delete those words which
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2127 appear in `bibtex-autokey-titleword-ignore'.
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2128 Build the title part of the key by using at least the first
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2129 `bibtex-autokey-titlewords' words from this
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2130 abbreviated title. If the abbreviated title ends after
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2131 maximal `bibtex-autokey-titlewords' +
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2132 `bibtex-autokey-titlewords-stretch' words, all
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2133 words from the abbreviated title are used.
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2134 11. Convert all used titlewords according to the conversion function
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2135 `bibtex-autokey-titleword-case-convert'.
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2136 12. For every used title word that appears in
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2137 `bibtex-autokey-titleword-abbrevs' use the corresponding
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2138 abbreviation (see documentation of this variable for further
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2139 detail).
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2140 13. From every title word not generated by an abbreviation, take
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2141 at least `bibtex-autokey-titleword-length' characters (abort
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2142 only after a consonant or at a word end).
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2143 14. Build the title part of the key by concatenating all
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2144 abbreviated title words with the string
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2145 `bibtex-autokey-titleword-separator' between any two.
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2146 15. At least, to get the key, concatenate
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2147 `bibtex-autokey-prefix-string', the name part, the year part
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2148 and the title part with `bibtex-autokey-name-year-separator'
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2149 between the name part and the year part if both are non-empty
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2150 and `bibtex-autokey-year-title-separator' between the year
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2151 part and the title part if both are non-empty. If the year
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2152 part is empty, but not the other two parts,
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2153 `bibtex-autokey-year-title-separator' is used as well.
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2154 16. If the value of `bibtex-autokey-before-presentation-function'
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2155 is non-nil, it must be a function taking one argument. This
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2156 function is then called with the generated key as the
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2157 argument. The return value of this function (a string) is
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2158 used as the key.
20446
4bcd559e2cb4 (bibtex-generate-autokey): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 20359
diff changeset
2159 17. If the value of `bibtex-autokey-edit-before-use' is non-nil,
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2160 the key is then presented in the minibuffer to the user,
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2161 where it can be edited. The key given by the user is then
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2162 used."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2163 (let* ((name-etal "")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
2164 (namelist
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2165 (let ((nl (bibtex-autokey-get-names))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2166 nnl)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2167 (if (or (not (numberp bibtex-autokey-names))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2168 (<= (length nl)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2169 (+ bibtex-autokey-names
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2170 bibtex-autokey-names-stretch)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2171 nl
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2172 (setq name-etal bibtex-autokey-additional-names)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2173 (while (< (length nnl) bibtex-autokey-names)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2174 (setq nnl (append nnl (list (car nl)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2175 nl (cdr nl)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2176 nnl)))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2177 (namepart (concat (mapconcat 'identity
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2178 namelist
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2179 bibtex-autokey-name-separator)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2180 name-etal))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2181 (yearfield (bibtex-autokey-get-field "year"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2182 (yearpart (if (equal yearfield "")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2183 ""
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2184 (substring yearfield
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2185 (- (length yearfield)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2186 bibtex-autokey-year-length))))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2187 (titlepart (mapconcat 'identity
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2188 (bibtex-autokey-get-title)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2189 bibtex-autokey-titleword-separator))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2190 (autokey (concat bibtex-autokey-prefix-string
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2191 namepart
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2192 (unless (or (equal namepart "")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2193 (equal yearpart ""))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2194 bibtex-autokey-name-year-separator)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2195 yearpart
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2196 (unless (or (and (equal namepart "")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2197 (equal yearpart ""))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2198 (equal titlepart ""))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2199 bibtex-autokey-year-title-separator)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2200 titlepart)))
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2201 (if bibtex-autokey-before-presentation-function
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2202 (funcall bibtex-autokey-before-presentation-function autokey)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2203 autokey)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2204
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2205
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2206 (defun bibtex-parse-keys (&optional add abortable verbose)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2207 "Set `bibtex-reference-keys' to the keys used in the whole buffer.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2208 The buffer might possibly be restricted.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2209 Find both entry keys and crossref 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
2210 If ADD is non-nil add the new keys to `bibtex-reference-keys' instead of
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2211 simply resetting it. If ADD is an alist of keys, also add ADD to
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2212 `bibtex-reference-keys'. If ABORTABLE is non-nil abort on user
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2213 input. If VERBOSE is non-nil gives messages about progress.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2214 Return alist of keys if parsing was completed, `aborted' otherwise."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2215 (let ((reference-keys (if (and add
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2216 (listp bibtex-reference-keys))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2217 bibtex-reference-keys)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2218 (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
2219 (dolist (key add)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2220 (unless (assoc (car key) reference-keys)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2221 (push key reference-keys))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2222 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2223 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2224 (if verbose
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2225 (bibtex-progress-message
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2226 (concat (buffer-name) ": parsing 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
2227 (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
2228 (goto-char (point-min))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2229 (if bibtex-parse-keys-fast
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2230 (let ((case-fold-search t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2231 (re (concat bibtex-entry-head "\\|"
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2232 ",[ \t\n]*crossref[ \t\n]*=[ \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
2233 "\\(\"[^\"]*\"\\|{[^}]*}\\)[ \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
2234 (while (re-search-forward re nil t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2235 (if (and abortable (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
2236 ;; 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
2237 (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
2238 (let ((key (cond ((match-end 3)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2239 ;; This is a crossref.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2240 (buffer-substring-no-properties
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2241 (1+ (match-beginning 3)) (1- (match-end 3))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2242 ((assoc-ignore-case (bibtex-type-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
2243 bibtex-entry-field-alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2244 ;; This is an entry.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2245 (match-string-no-properties 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
2246 (if (and (stringp key)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2247 (not (assoc key reference-keys)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2248 (push (list key) reference-keys)))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2249
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2250 (let (;; ignore @String entries because they are handled
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2251 ;; separately by bibtex-parse-strings
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2252 (bibtex-sort-ignore-string-entries t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2253 crossref-key bounds)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2254 (bibtex-map-entries
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2255 (lambda (key beg end)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2256 (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
2257 (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
2258 ;; 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
2259 (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
2260 (if verbose (bibtex-progress-message))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2261 (unless (assoc key reference-keys)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2262 (push (list key) reference-keys))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2263 (if (and (setq bounds (bibtex-search-forward-field "crossref" end))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2264 (setq crossref-key (bibtex-text-in-field-bounds bounds t))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2265 (not (assoc crossref-key reference-keys)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2266 (push (list crossref-key) reference-keys))))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2267
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2268 (if verbose
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2269 (bibtex-progress-message 'done))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2270 ;; successful operation --> return `bibtex-reference-keys'
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2271 (setq bibtex-reference-keys reference-keys))))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2272
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2273 (defun bibtex-parse-strings (&optional add abortable)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2274 "Set `bibtex-strings' to the string definitions in the whole buffer.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2275 The buffer might possibly be restricted.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2276 If ADD is non-nil add the new strings to `bibtex-strings' instead of
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2277 simply resetting it. If ADD is an alist of strings, also add ADD to
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2278 `bibtex-strings'. If ABORTABLE is non-nil abort on user input.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2279 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
2280 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2281 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2282 (goto-char (point-min))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2283 (let ((strings (if (and add
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2284 (listp 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
2285 bibtex-strings))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2286 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
2287 (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
2288 (dolist (string add)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2289 (unless (assoc (car 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
2290 (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
2291 (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
2292 (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
2293 (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
2294 (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
2295 ;; 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
2296 (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
2297 (setq key (bibtex-reference-key-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
2298 (if (not (assoc-ignore-case key strings))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2299 (push (cons key (bibtex-text-in-string bounds t))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2300 strings))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2301 (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
2302 ;; 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
2303 (setq bibtex-strings strings))))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2304
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2305 (defun bibtex-string-files-init ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2306 "Return initialization for `bibtex-strings'.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2307 Use `bibtex-predefined-strings' and bib files `bibtex-string-files'."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2308 (save-match-data
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2309 ;; collect pathnames
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2310 (let ((dirlist (split-string (or bibtex-string-file-path ".")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2311 ":+"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2312 (case-fold-search)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2313 compl)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2314 (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
2315 (unless (string-match "\\.bib\\'" filename)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2316 (setq filename (concat filename ".bib")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2317 ;; test filenames
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2318 (let (fullfilename bounds found)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2319 (dolist (dir dirlist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2320 (when (file-readable-p
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2321 (setq fullfilename (expand-file-name filename dir)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2322 ;; file was found
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2323 (with-temp-buffer
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2324 (insert-file-contents fullfilename)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2325 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2326 (while (setq bounds (bibtex-search-forward-string))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2327 (push (cons (bibtex-reference-key-in-string bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2328 (bibtex-text-in-string bounds t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2329 compl)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2330 (goto-char (bibtex-end-of-string bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2331 (setq found t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2332 (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
2333 (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
2334 filename))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2335 (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
2336
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2337 (defun bibtex-parse-buffers-stealthily ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2338 "Called by `bibtex-run-with-idle-timer'. Whenever emacs has been idle
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2339 for `bibtex-parse-keys-timeout' seconds, all BibTeX buffers (starting
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2340 with the current) are parsed."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2341 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2342 (let ((buffers (buffer-list))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2343 (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
2344 (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
2345 (set-buffer (car buffers))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2346 (if (and (eq major-mode 'bibtex-mode)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2347 (not (eq (buffer-modified-tick)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2348 bibtex-buffer-last-parsed-tick)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2349 (save-restriction
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2350 (widen)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2351 ;; Output no progress messages in bibtex-parse-keys
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2352 ;; because when in y-or-n-p that can hide the question.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2353 (if (and (listp (bibtex-parse-keys nil t))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2354 ;; 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
2355 (listp (bibtex-parse-strings strings-init t)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2356
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2357 ;; remember that parsing was successful
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2358 (setq bibtex-buffer-last-parsed-tick (buffer-modified-tick)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2359 (setq buffers (cdr buffers))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2360
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2361 (defun bibtex-complete-internal (completions)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2362 "Complete word fragment before point to longest prefix of one
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2363 string defined in list COMPLETIONS. If point is not after the part
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2364 of a word, all strings are listed. Return completion."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2365 (let* ((case-fold-search t)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2366 (beg (save-excursion
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2367 (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
2368 (forward-char)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2369 (point)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2370 (end (point))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2371 (part-of-word (buffer-substring-no-properties beg end))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2372 (completion (try-completion part-of-word completions)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2373 (cond ((not completion)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2374 (error "Can't find completion for `%s'" part-of-word))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2375 ((eq completion t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2376 part-of-word)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2377 ((not (string= part-of-word completion))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2378 (delete-region beg end)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2379 (insert completion)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2380 completion)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2381 (t
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2382 (message "Making completion list...")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2383 (with-output-to-temp-buffer "*Completions*"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2384 (display-completion-list (all-completions part-of-word
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2385 completions)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2386 (message "Making completion list...done")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2387 nil))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2388
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2389 (defun bibtex-complete-string-cleanup (str)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2390 "Cleanup after inserting string STR.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2391 Remove enclosing field delimiters for string STR. Display message with
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2392 expansion of STR."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2393 (let ((pair (assoc str bibtex-strings)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2394 (when pair
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2395 (if (cdr pair)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2396 (message "Abbreviation for `%s'" (cdr pair)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2397 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2398 (bibtex-inside-field)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2399 (let ((bounds (bibtex-enclosing-field)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2400 (goto-char (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2401 (let ((boundaries (bibtex-parse-field-string)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2402 (if (and boundaries
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2403 (equal (cdr boundaries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2404 (bibtex-end-of-text-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2405 (bibtex-remove-delimiters))))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2406
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2407 (defun bibtex-choose-completion-string (choice buffer mini-p base-size)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2408 ;; Code borrowed from choose-completion-string:
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2409 ;; We must duplicate the code from choose-completion-string
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2410 ;; because it runs the hook choose-completion-string-functions
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2411 ;; before it inserts the completion. But we want to do something
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2412 ;; after the completion has been inserted.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2413 ;;
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2414 ;; Insert the completion into the buffer where it was requested.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2415 (set-buffer buffer)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2416 (if base-size
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2417 (delete-region (+ base-size (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2418 (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2419 ;; Delete the longest partial match for CHOICE
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2420 ;; that can be found before point.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2421 (choose-completion-delete-max-match choice))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2422 (insert choice)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2423 (remove-text-properties (- (point) (length choice)) (point)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2424 '(mouse-face nil))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2425 ;; Update point in the window that BUFFER is showing in.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2426 (let ((window (get-buffer-window buffer t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2427 (set-window-point window (point))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2428
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2429 (defun bibtex-pop (arg direction)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2430 "Generic function used by `bibtex-pop-previous' and `bibtex-pop-next'."
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2431 (let (bibtex-help-message)
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2432 (bibtex-find-text nil))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2433 (save-excursion
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2434 ;; parse current field
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2435 (bibtex-inside-field)
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
2436 (let* ((case-fold-search t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2437 (bounds (bibtex-enclosing-field))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2438 (start-old-text (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2439 (stop-old-text (bibtex-end-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2440 (start-name (bibtex-start-of-name-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2441 (stop-name (bibtex-end-of-name-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2442 ;; construct regexp for field with same name as this one,
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2443 ;; ignoring possible OPT's or ALT's
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2444 (field-name (progn
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2445 (goto-char start-name)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2446 (buffer-substring-no-properties
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2447 (if (looking-at "\\(OPT\\)\\|\\(ALT\\)")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2448 (match-end 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2449 (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2450 stop-name))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2451 ;; 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
2452 ;; the last one was finished
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2453 (unless (eq last-command 'bibtex-pop)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2454 (bibtex-enclosing-entry-maybe-empty-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2455 (setq bibtex-pop-previous-search-point (match-beginning 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2456 bibtex-pop-next-search-point (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2457 (if (eq direction 'previous)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2458 (goto-char bibtex-pop-previous-search-point)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2459 (goto-char bibtex-pop-next-search-point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2460 ;; Now search for arg'th previous/next similar field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2461 (let (bounds failure new-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2462 (while (and (not failure)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2463 (> arg 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2464 (cond ((eq direction 'previous)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2465 (if (setq bounds (bibtex-search-backward-field field-name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2466 (goto-char (bibtex-start-of-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2467 (setq failure t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2468 ((eq direction 'next)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2469 (if (setq bounds (bibtex-search-forward-field field-name))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2470 (goto-char (bibtex-end-of-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2471 (setq failure t))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2472 (setq arg (- arg 1)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2473 (if failure
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2474 (error "No %s matching BibTeX field"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2475 (if (eq direction 'previous) "previous" "next"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2476 ;; Found a matching field. Remember boundaries.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2477 (setq bibtex-pop-previous-search-point (bibtex-start-of-field bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2478 bibtex-pop-next-search-point (bibtex-end-of-field bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2479 new-text (bibtex-text-in-field-bounds bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2480 (bibtex-flash-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2481 ;; Go back to where we started, delete old text, and pop new.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2482 (goto-char stop-old-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2483 (delete-region start-old-text stop-old-text)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2484 (insert new-text)))))
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2485 (let (bibtex-help-message)
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2486 (bibtex-find-text nil))
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2487 (setq this-command 'bibtex-pop))
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
2488
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2489 (defsubst bibtex-read-key (prompt &optional key)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2490 "Read BibTeX key from minibuffer using PROMPT and default KEY."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2491 (completing-read prompt bibtex-reference-keys
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2492 nil nil key 'bibtex-key-history))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2493
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2494 ;; Interactive Functions:
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2495
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2496 ;;;###autoload
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2497 (defun bibtex-mode ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2498 "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
2499
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2500 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
2501
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2502 You should use commands such as \\[bibtex-Book] to get a template for a
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2503 specific entry. You should then fill in all desired fields using
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2504 \\[bibtex-next-field] to jump from field to field. After having filled
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2505 in all desired fields in the entry, you should clean the new 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
2506 with the command \\[bibtex-clean-entry].
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2507
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2508 Some features of BibTeX mode are available only by setting the variable
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2509 `bibtex-maintain-sorted-entries' to non-nil. However, then BibTeX mode will
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2510 work only with buffers containing valid (syntactical correct) entries
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2511 and with entries being sorted. This is usually the case, if you have
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2512 created a buffer completely with BibTeX mode and finished every new
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2513 entry with \\[bibtex-clean-entry].
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2514
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2515 For third party BibTeX files, call the function `bibtex-convert-alien'
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2516 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
2517
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2518
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2519 Special information:
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2520
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2521 A command such as \\[bibtex-Book] will outline the fields for a BibTeX book entry.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2522
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2523 The optional fields start with the string OPT, and are thus ignored by BibTeX.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2524 Alternatives from which only one is required start with the string ALT.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2525 The OPT or ALT string may be removed from a field with \\[bibtex-remove-OPT-or-ALT].
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2526 \\[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
2527 \\[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
2528 \\[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
2529 \\[bibtex-remove-delimiters] removes the double-quotes or braces around the text of the current field.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2530 \\[bibtex-empty-field] replaces the text of the current field with the default \"\" or {}.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2531
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2532 The command \\[bibtex-clean-entry] cleans the current entry, i.e. it removes OPT/ALT
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2533 from all non-empty optional or alternative fields, checks that no required
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2534 fields are empty, and does some formatting dependent on the value of
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2535 `bibtex-entry-format'.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2536 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
2537 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
2538 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
2539
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2540 Use \\[bibtex-find-text] to position the cursor at the end of the current field.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2541 Use \\[bibtex-next-field] to move to end of the next field.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2542
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2543 The following may be of interest as well:
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2544
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2545 Functions:
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2546 `bibtex-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2547 `bibtex-kill-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2548 `bibtex-yank-pop'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2549 `bibtex-pop-previous'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2550 `bibtex-pop-next'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2551 `bibtex-complete'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2552 `bibtex-print-help-message'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2553 `bibtex-generate-autokey'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2554 `bibtex-beginning-of-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2555 `bibtex-end-of-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2556 `bibtex-reposition-window'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2557 `bibtex-mark-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2558 `bibtex-ispell-abstract'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2559 `bibtex-ispell-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2560 `bibtex-narrow-to-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2561 `bibtex-sort-buffer'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2562 `bibtex-validate'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2563 `bibtex-count'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2564 `bibtex-fill-entry'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2565 `bibtex-reformat'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2566 `bibtex-convert-alien'
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2567
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2568 Variables:
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2569 `bibtex-field-delimiters'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2570 `bibtex-include-OPTcrossref'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2571 `bibtex-include-OPTkey'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2572 `bibtex-user-optional-fields'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2573 `bibtex-entry-format'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2574 `bibtex-sort-ignore-string-entries'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2575 `bibtex-maintain-sorted-entries'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2576 `bibtex-entry-field-alist'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2577 `bibtex-predefined-strings'
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2578 `bibtex-string-files'
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2579
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2580 ---------------------------------------------------------
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
2581 Entry to BibTeX mode calls the value of `bibtex-mode-hook' if that value is
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2582 non-nil.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2583
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2584 \\{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
2585 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2586 (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
2587 (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
2588 (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
2589 (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
2590 (set-syntax-table bibtex-mode-syntax-table)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2591 (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
2592 ;; Install stealthy parse function if not already installed
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2593 (unless bibtex-parse-idle-timer
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2594 (setq bibtex-parse-idle-timer (bibtex-run-with-idle-timer
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2595 bibtex-parse-keys-timeout t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2596 'bibtex-parse-buffers-stealthily)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2597 (set (make-local-variable 'paragraph-start) "[ \f\n\t]*$")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2598 (set (make-local-variable 'comment-start) bibtex-comment-start)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2599 (set (make-local-variable 'comment-start-skip)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2600 (concat (regexp-quote bibtex-comment-start) "\\>[ \t]*"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2601 (set (make-local-variable 'comment-column) 0)
51416
83476384bebd (bibtex-member-of-regexp, bibtex-assoc-of-regexp, bibtex-format-entry)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51415
diff changeset
2602 (set (make-local-variable 'defun-prompt-regexp) "^[ \t]*@[a-zA-Z0-9]+[ \t]*")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2603 (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
2604 (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
2605 (set (make-local-variable 'fill-prefix) (make-string (+ bibtex-entry-offset
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2606 bibtex-contline-indentation)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2607 ? ))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2608 (set (make-local-variable 'font-lock-defaults)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2609 '(bibtex-font-lock-keywords
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2610 nil t ((?$ . "\"")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2611 ;; Mathematical expressions should be fontified as strings
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2612 (?\" . ".")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2613 ;; Quotes are field delimiters and quote-delimited
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2614 ;; entries should be fontified in the same way as
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2615 ;; brace-delimited ones
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2616 )
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2617 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
2618 (font-lock-syntactic-keywords . bibtex-font-lock-syntactic-keywords)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2619 (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
2620 . (lambda ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2621 (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
2622 (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
2623 (setq imenu-generic-expression
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2624 (list (list nil bibtex-entry-head bibtex-key-in-head)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2625 (make-local-variable 'choose-completion-string-functions)
20459
90f306f86f5d Use imenu-case-fold-search.
Dave Love <fx@gnu.org>
parents: 20447
diff changeset
2626 (setq imenu-case-fold-search t)
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2627 ;; XEmacs needs easy-menu-add, Emacs does not care
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
2628 (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
2629 (easy-menu-add bibtex-entry-menu)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2630 (run-hooks 'bibtex-mode-hook))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2631
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2632 (defun bibtex-entry (entry-type)
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2633 "Insert a new BibTeX entry.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
2634 After insertion it calls the functions in `bibtex-add-entry-hook'."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2635 (interactive (let* ((completion-ignore-case t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2636 (e-t (completing-read
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2637 "Entry Type: "
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2638 bibtex-entry-field-alist
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2639 nil t nil 'bibtex-entry-type-history)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2640 (list e-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
2641 (let* (required optional
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2642 (key (if bibtex-maintain-sorted-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
2643 (bibtex-read-key (format "%s key: " entry-type))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2644 (e (assoc-ignore-case entry-type bibtex-entry-field-alist))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2645 (r-n-o (elt e 1))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2646 (c-ref (elt e 2)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2647 (if (not e)
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2648 (error "Bibtex entry type %s not defined" entry-type))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2649 (if (and (member entry-type bibtex-include-OPTcrossref)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2650 c-ref)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2651 (setq required (elt c-ref 0)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2652 optional (elt c-ref 1))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2653 (setq required (elt r-n-o 0)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2654 optional (elt r-n-o 1)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2655 (unless (bibtex-prepare-new-entry (list key nil entry-type))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2656 (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
2657 (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
2658 (insert "@" entry-type (bibtex-entry-left-delimiter))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2659 (if key
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2660 (insert key))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2661 (save-excursion
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2662 (mapcar 'bibtex-make-field required)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2663 (if (member entry-type bibtex-include-OPTcrossref)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2664 (bibtex-make-optional-field '("crossref")))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2665 (if bibtex-include-OPTkey
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2666 (if (or (stringp bibtex-include-OPTkey)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2667 (fboundp bibtex-include-OPTkey))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2668 (bibtex-make-optional-field
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2669 (list "key" nil bibtex-include-OPTkey))
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2670 (bibtex-make-optional-field '("key"))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2671 (mapcar 'bibtex-make-optional-field optional)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2672 (mapcar 'bibtex-make-optional-field bibtex-user-optional-fields)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2673 (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
2674 (insert ","))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2675 (insert "\n")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2676 (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
2677 (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
2678 (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
2679 (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
2680 (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
2681 (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
2682
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2683 (defun 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
2684 "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
2685 The alist elements have the form (FIELD . TEXT), where FIELD can also be
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2686 the special strings \"=type=\" and \"=key=\"."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2687 (let (alist bounds)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2688 (when (looking-at bibtex-entry-head)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2689 (push (cons "=type=" (match-string bibtex-type-in-head)) alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2690 (push (cons "=key=" (match-string bibtex-key-in-head)) alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2691 (goto-char (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
2692 (while (setq bounds (bibtex-parse-field bibtex-field-name))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2693 (push (cons (bibtex-name-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
2694 (bibtex-text-in-field-bounds bounds))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2695 alist)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2696 (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
2697 alist))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2698
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2699 (defun bibtex-autofill-entry ()
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2700 "Try to fill fields based on surrounding entries."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2701 (interactive)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2702 (undo-boundary) ;So you can easily undo it, if it didn't work right.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2703 (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
2704 (when (looking-at bibtex-entry-head)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2705 (let ((type (match-string bibtex-type-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
2706 (key (match-string 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
2707 (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
2708 (case-fold-search t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2709 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
2710 ;; 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
2711 (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
2712 ;; 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
2713 ;; 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
2714 (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
2715 (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
2716 (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
2717 (when (and
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2718 (looking-at bibtex-entry-head)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2719 (equal type (match-string bibtex-type-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
2720 ;; In case we found ourselves :-(
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2721 (not (equal key (setq tmp (match-string 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
2722 (setq other-key tmp)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2723 (setq other (point))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2724 (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
2725 (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
2726 (bibtex-skip-to-valid-entry)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2727 (when (and
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2728 (looking-at bibtex-entry-head)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2729 (equal type (match-string bibtex-type-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
2730 ;; In case we found ourselves :-(
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2731 (not (equal key (setq tmp (match-string 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
2732 (or (not 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
2733 ;; Check which is the best match.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2734 (< (length (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
2735 (length (try-completion "" (list key tmp))))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2736 (setq other-key tmp)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2737 (setq other (point))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2738 ;; 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
2739 (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
2740 (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
2741 (setq key-end (point)) ;In case parse-entry changed the buffer.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2742 (while (setq bounds (bibtex-parse-field bibtex-field-name))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2743 (goto-char (bibtex-start-of-name-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
2744 (let* ((name (buffer-substring
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2745 (if (looking-at "ALT\\|OPT") (match-end 0) (point))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2746 (bibtex-end-of-name-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
2747 (text (assoc-ignore-case name other)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2748 (goto-char (bibtex-start-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
2749 (if (not (and (looking-at bibtex-empty-field-re) text))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2750 (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
2751 (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
2752 (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
2753 ;; 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
2754 ;; 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
2755 (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
2756 ;; 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
2757 ;; 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
2758 (_ (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
2759 (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
2760 (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
2761 (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
2762 (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
2763 (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
2764
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2765 (defun bibtex-print-help-message ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2766 "Print helpful information about current field in current BibTeX entry."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2767 (interactive)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2768 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2769 (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2770 (bounds (bibtex-enclosing-field))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2771 (mb (bibtex-start-of-name-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2772 (field-name (buffer-substring-no-properties
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2773 (if (progn (goto-char mb)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2774 (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
2775 (match-end 0) mb)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2776 (bibtex-end-of-name-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2777 (entry-type (progn (re-search-backward
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2778 bibtex-entry-maybe-empty-head nil t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2779 (bibtex-type-in-head)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2780 (entry-list (assoc-ignore-case entry-type
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2781 bibtex-entry-field-alist))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2782 (c-r-list (elt entry-list 2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2783 (req-opt-list (if (and (member entry-type
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2784 bibtex-include-OPTcrossref)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2785 c-r-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2786 c-r-list
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2787 (elt entry-list 1)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2788 (list-of-entries (append (elt req-opt-list 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2789 (elt req-opt-list 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2790 bibtex-user-optional-fields
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2791 (if (member entry-type
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2792 bibtex-include-OPTcrossref)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2793 '(("crossref" "Reference key of the cross-referenced entry")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2794 (if bibtex-include-OPTkey
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2795 '(("key" "Used for reference key creation if author and editor fields are missing")))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2796 (comment (assoc-ignore-case field-name list-of-entries)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2797 (if comment
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2798 (message (elt comment 1))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2799 (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
2800
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2801 (defun bibtex-make-field (field &optional called-by-yank)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2802 "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
2803 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
2804 \(FIELD-NAME COMMENT-STRING INIT ALTERNATIVE-FLAG) as in
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2805 `bibtex-entry-field-alist'."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2806 (interactive
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2807 (list (let* ((entry-type
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2808 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2809 (bibtex-enclosing-entry-maybe-empty-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2810 (bibtex-type-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
2811 ;; "preliminary" completion list
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2812 (fl (nth 1 (assoc-ignore-case
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2813 entry-type bibtex-entry-field-alist)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2814 ;; "full" completion list
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2815 (field-list (append (nth 0 fl)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2816 (nth 1 fl)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2817 bibtex-user-optional-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
2818 (if (member entry-type
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2819 bibtex-include-OPTcrossref)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2820 '(("crossref")))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2821 (if bibtex-include-OPTkey
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2822 '(("key")))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2823 (completion-ignore-case t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2824 (completing-read "BibTeX field name: " field-list
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2825 nil nil nil bibtex-field-history))))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2826 (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
2827 (setq field (list field)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2828 (if (or (interactive-p) called-by-yank)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2829 (let (bibtex-help-message)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2830 (bibtex-find-text nil t t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2831 (if (looking-at "[}\"]")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2832 (forward-char))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2833 (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
2834 (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
2835 (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
2836 (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
2837 (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
2838 (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
2839 (- 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
2840 (insert "= ")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2841 (if (not 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
2842 (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
2843 bibtex-text-indentation)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2844 (if (not called-by-yank) (insert (bibtex-field-left-delimiter)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2845 (let ((init (nth 2 field)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2846 (cond ((stringp init)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2847 (insert init))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2848 ((fboundp init)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2849 (insert (funcall init)))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2850 (if (not called-by-yank) (insert (bibtex-field-right-delimiter)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2851 (if (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
2852 (forward-char -1)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2853
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2854 (defun bibtex-beginning-of-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2855 "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
2856 If inside an entry, move to the beginning of it, otherwise move to the
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2857 beginning of the previous entry. If point is ahead of all BibTeX entries
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2858 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
2859 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2860 (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
2861 (if (looking-at "@")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2862 (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
2863 (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
2864 (point))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2865
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2866 (defun bibtex-end-of-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2867 "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
2868 If inside an entry, move to the end of it, otherwise move to the end
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2869 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
2870 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
2871 (interactive)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2872 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2873 (org (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2874 (pnt (bibtex-beginning-of-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2875 err 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
2876 (cond ((looking-at bibtex-valid-entry-whitespace-re)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2877 (bibtex-search-entry t nil t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2878 (unless (equal (match-beginning 0) pnt)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2879 (setq err t)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2880 ((setq bounds (bibtex-parse-string))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2881 (goto-char (bibtex-end-of-string bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2882 ((looking-at "[ \t]*@[ \t]*preamble[ \t\n]*")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2883 (goto-char (match-end 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2884 (cond ((looking-at "(")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2885 (unless (re-search-forward ")[ \t]*\n\n" nil 'move)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2886 (setq err t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2887 ((looking-at "{")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2888 (unless (re-search-forward "}[ \t]*\n\n" nil 'move)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2889 (setq err t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2890 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2891 (setq err t)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2892 (unless err
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2893 (goto-char (match-beginning 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2894 (forward-char)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2895 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2896 (if (interactive-p)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2897 (message "Not on a known BibTeX entry."))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2898 (goto-char org)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2899 (when err
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2900 (goto-char pnt)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2901 (error "Syntactically incorrect BibTeX entry starts here")))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2902 (point))
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2903
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2904 (defun bibtex-reposition-window (&optional arg)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2905 "Make the current BibTeX entry visible.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2906 Optional argument ARG is exactly as in `recenter'."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2907 (interactive "P")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2908 (save-excursion
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2909 (goto-char
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2910 (/ (+ (bibtex-beginning-of-entry) (bibtex-end-of-entry)) 2))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2911 (recenter arg)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2912
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2913 (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
2914 "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
2915 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2916 (set-mark (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
2917 (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
2918
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2919 (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
2920 "Count number of entries in current buffer or region.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2921 With prefix argument COUNT-STRING-ENTRIES it counts all entries,
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
2922 otherwise it counts all except Strings.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2923 If mark is active it counts entries in region, if not in whole buffer."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2924 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2925 (let ((number 0)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2926 (bibtex-sort-ignore-string-entries
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2927 (not count-string-entries)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2928 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2929 (save-restriction
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2930 (narrow-to-region (if (bibtex-mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2931 (region-beginning)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2932 (bibtex-beginning-of-first-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2933 (if (bibtex-mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2934 (region-end)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2935 (point-max)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2936 (goto-char (point-min))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2937 (bibtex-map-entries (lambda (key beg end)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2938 (setq number (1+ number))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2939 (message "%s contains %d entries."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2940 (if (bibtex-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
2941 number)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2942
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2943 (defun bibtex-ispell-entry ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2944 "Spell whole BibTeX entry."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2945 (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
2946 (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
2947 (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
2948
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2949 (defun bibtex-ispell-abstract ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2950 "Spell abstract of BibTeX entry."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2951 (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
2952 (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
2953 (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
2954 (bibtex-search-forward-field "abstract" t))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2955 (if bounds
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2956 (ispell-region (bibtex-start-of-text-in-field bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2957 (bibtex-end-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2958 (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
2959
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2960 (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
2961 "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
2962 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
2963 (save-excursion
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2964 (widen)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2965 (narrow-to-region (bibtex-beginning-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2966 (bibtex-end-of-entry))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2967
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2968 (defun bibtex-entry-index ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2969 "Return the index of the BibTeX entry at point. Move point.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2970 The index is a list (KEY CROSSREF-KEY ENTRY-NAME) that is used for sorting
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2971 the entries of the BibTeX buffer. Return nil if no entry found."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2972 (let ((case-fold-search t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2973 (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
2974 (let ((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
2975 ;; all entry names should be downcase (for ease of comparison)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2976 (entry-name (downcase (bibtex-type-in-head))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2977 ;; Don't search CROSSREF-KEY if we don't need it.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2978 (if (equal bibtex-maintain-sorted-entries 'crossref)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2979 (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
2980 (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
2981 (let ((bounds (bibtex-search-forward-field
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2982 "\\(OPT\\)?crossref" t)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2983 (list key
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2984 (if bounds (bibtex-text-in-field-bounds bounds t))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2985 entry-name))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
2986 (list key nil entry-name)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2987
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2988 (defun bibtex-lessp (index1 index2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2989 "Predicate for sorting BibTeX entries with indices INDEX1 and INDEX2.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2990 Each index is a list (KEY CROSSREF-KEY ENTRY-NAME).
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2991 The predicate depends on the variable `bibtex-maintain-sorted-entries'."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2992 (cond ((not index1) (not index2)) ; indices can be nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2993 ((not index2) nil)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2994 ((equal bibtex-maintain-sorted-entries 'crossref)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2995 (if (nth 1 index1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2996 (if (nth 1 index2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2997 (or (string-lessp (nth 1 index1) (nth 1 index2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2998 (and (string-equal (nth 1 index1) (nth 1 index2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
2999 (string-lessp (nth 0 index1) (nth 0 index2))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3000 (not (string-lessp (nth 0 index2) (nth 1 index1))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3001 (if (nth 1 index2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3002 (string-lessp (nth 0 index1) (nth 1 index2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3003 (string-lessp (nth 0 index1) (nth 0 index2)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3004 ((equal 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
3005 (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
3006 (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
3007 '(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
3008 (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
3009 (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
3010 '(nil . 1000))))) ; if there is nothing else
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3011 (or (< n1 n2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3012 (and (= n1 n2)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3013 (string-lessp (car index1) (car index2))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3014 (t ; (equal bibtex-maintain-sorted-entries 'plain)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3015 (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
3016
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3017 (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
3018 "Sort BibTeX buffer alphabetically by key.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3019 The predicate for sorting is defined via `bibtex-maintain-sorted-entries'.
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
3020 Text outside of BibTeX entries is not affected. If
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
3021 `bibtex-sort-ignore-string-entries' is non-nil, @String entries will be
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3022 ignored."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3023 (interactive)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3024 (unless bibtex-maintain-sorted-entries
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3025 (error "You must choose a sorting scheme"))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3026 (save-restriction
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3027 (narrow-to-region (bibtex-beginning-of-first-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3028 (save-excursion (goto-char (point-max))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3029 (bibtex-end-of-entry)))
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
3030 (bibtex-skip-to-valid-entry)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3031 (sort-subr nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3032 'bibtex-skip-to-valid-entry ; NEXTREC function
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3033 'bibtex-end-of-entry ; ENDREC function
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3034 'bibtex-entry-index ; STARTKEY function
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3035 nil ; ENDKEY function
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3036 'bibtex-lessp))) ; PREDICATE
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3037
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3038 (defun bibtex-find-crossref (crossref-key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3039 "Move point to the beginning of BibTeX entry CROSSREF-KEY.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3040 Return position of entry if CROSSREF-KEY is found and nil 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
3041 If position of current entry is after CROSSREF-KEY an error is signaled.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3042 If called interactively, CROSSREF-KEY defaults to crossref key of current
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3043 entry."
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3044 (interactive
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3045 (let ((crossref-key
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3046 (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
3047 (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
3048 (let ((bounds (bibtex-search-forward-field "crossref" t)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3049 (if bounds
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3050 (bibtex-text-in-field-bounds bounds t))))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3051 (list (bibtex-read-key "Find crossref key: " crossref-key))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3052 (let ((pos (save-excursion (bibtex-find-entry crossref-key))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3053 (if (and pos (> (point) pos))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3054 (error "This entry must not follow the crossrefed entry!"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3055 (goto-char pos)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3056
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3057 (defun bibtex-find-entry (key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3058 "Move point to the beginning of BibTeX entry named KEY.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3059 Return position of entry if KEY is found or nil if not 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
3060 (interactive (list (bibtex-read-key "Find key: ")))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3061 (let* (case-fold-search
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3062 (pnt (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3063 (goto-char (point-min))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3064 (if (re-search-forward (concat "^[ \t]*\\("
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3065 bibtex-entry-type
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3066 "\\)[ \t]*[({][ \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
3067 (regexp-quote key)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3068 "\\)[ \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
3069 nil t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3070 (match-beginning 0)))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3071 (cond (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
3072 (goto-char pnt))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3073 ((interactive-p)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3074 (message "Key `%s' not found" key)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3075
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3076 (defun bibtex-prepare-new-entry (index)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3077 "Prepare a new BibTeX entry with index INDEX.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3078 INDEX is a list (KEY CROSSREF-KEY ENTRY-NAME).
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3079 Move point where the entry KEY should be placed.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3080 If `bibtex-maintain-sorted-entries' is non-nil, perform a binary
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3081 search to look for place for KEY. This will fail if buffer is not in
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3082 sorted order, see \\[bibtex-validate].)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3083 Return t if preparation was successful or nil if entry KEY already exists."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3084 (let ((key (nth 0 index))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3085 key-exist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3086 (cond ((or (null key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3087 (and (stringp key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3088 (string-equal key ""))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3089 (and (not (setq key-exist (bibtex-find-entry key)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3090 (not bibtex-maintain-sorted-entries)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3091 (bibtex-move-outside-of-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3092 ;; 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
3093 ;; then point will be at beginning of entry named key.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3094 (key-exist)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3095 (t ; bibtex-maintain-sorted-entries is non-nil
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3096 (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3097 (left (save-excursion (bibtex-beginning-of-first-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3098 (bibtex-skip-to-valid-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3099 (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3100 (right (save-excursion (bibtex-beginning-of-last-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3101 (bibtex-end-of-entry)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3102 (found (if (>= left right) left))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3103 actual-index new)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3104 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3105 ;; Binary search
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3106 (while (not found)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3107 (goto-char (/ (+ left right) 2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3108 (bibtex-skip-to-valid-entry t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3109 (setq actual-index (bibtex-entry-index))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3110 (cond ((bibtex-lessp index actual-index)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3111 (setq new (bibtex-beginning-of-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3112 (if (equal right new)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3113 (setq found right)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3114 (setq right new)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3115 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3116 (bibtex-end-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3117 (bibtex-skip-to-valid-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3118 (setq new (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3119 (if (equal left new)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3120 (setq found right)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3121 (setq left new))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3122 (goto-char found)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3123 (bibtex-beginning-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3124 (setq actual-index (save-excursion (bibtex-entry-index)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3125 (when (or (not actual-index)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3126 (bibtex-lessp actual-index index))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3127 ;; buffer contains no valid entries or
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3128 ;; greater than last entry --> append
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3129 (bibtex-end-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3130 (if (not (bobp))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3131 (newline (forward-line 2)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3132 (beginning-of-line)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3133 (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
3134
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3135 (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
3136 "Validate if buffer or region is syntactically correct.
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3137 Only known entry types are checked, so you can put comments
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3138 outside of entries.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3139 With optional argument TEST-THOROUGHLY non-nil it checks for absence of
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3140 required fields and questionable month fields as well.
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3141 If mark is active, validate current region, if not the whole buffer.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3142 Returns t if test was successful, nil otherwise."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3143 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3144 (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3145 error-list syntax-error)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3146 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3147 (save-restriction
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3148 (narrow-to-region (if (bibtex-mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3149 (region-beginning)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3150 (bibtex-beginning-of-first-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3151 (if (bibtex-mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3152 (region-end)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3153 (point-max)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3154
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3155 ;; looking if entries fit syntactical structure
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3156 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3157 (bibtex-progress-message "Checking syntactical structure")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3158 (let (bibtex-sort-ignore-string-entries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3159 (while (re-search-forward "^[ \t]*@" nil t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3160 (bibtex-progress-message)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3161 (forward-char -1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3162 (let ((pnt (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3163 (if (not (looking-at bibtex-any-valid-entry-re))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3164 (forward-char)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3165 (bibtex-skip-to-valid-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3166 (if (equal (point) pnt)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3167 (forward-char)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3168 (goto-char pnt)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3169 (push (list (bibtex-current-line)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3170 "Syntax error (check esp. commas, braces, and quotes)")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3171 error-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3172 (forward-char))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3173 (bibtex-progress-message 'done)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3174
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3175 (if error-list
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3176 (setq syntax-error t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3177 ;; looking for correct sort order and duplicates (only if
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3178 ;; there were no syntax errors)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3179 (if bibtex-maintain-sorted-entries
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3180 (let (previous current)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3181 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3182 (bibtex-progress-message "Checking correct sort order")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3183 (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
3184 (lambda (key beg end)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3185 (bibtex-progress-message)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3186 (goto-char beg)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3187 (setq current (bibtex-entry-index))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3188 (cond ((or (not previous)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3189 (bibtex-lessp previous current))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3190 (setq previous current))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3191 ((string-equal (car previous) (car current))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3192 (push (list (bibtex-current-line)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3193 "Duplicate key with previous")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3194 error-list))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3195 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3196 (setq previous current)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3197 (push (list (bibtex-current-line)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3198 "Entries out of order")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3199 error-list)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3200 (bibtex-progress-message 'done)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3201
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3202 (when test-thoroughly
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3203 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3204 (bibtex-progress-message
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3205 "Checking required fields and month fields")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3206 (let ((bibtex-sort-ignore-string-entries t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3207 (questionable-month
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3208 (regexp-opt (mapcar 'car bibtex-predefined-month-strings))))
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
3209 (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
3210 (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
3211 (bibtex-progress-message)
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3212 (let* ((entry-list (progn
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3213 (goto-char beg)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3214 (bibtex-search-entry nil end)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3215 (assoc-ignore-case (bibtex-type-in-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3216 bibtex-entry-field-alist)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3217 (req (copy-sequence (elt (elt entry-list 1) 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3218 (creq (copy-sequence (elt (elt entry-list 2) 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3219 crossref-there bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3220 (goto-char beg)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3221 (while (setq bounds (bibtex-search-forward-field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3222 bibtex-field-name end))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3223 (goto-char (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3224 (let ((field-name (downcase (bibtex-name-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3225 case-fold-search)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3226 (if (and (equal field-name "month")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3227 (not (string-match questionable-month
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3228 (bibtex-text-in-field-bounds bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3229 (push (list (bibtex-current-line)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3230 "Questionable month field")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3231 error-list))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3232 (setq req (delete (assoc-ignore-case field-name req) req)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3233 creq (delete (assoc-ignore-case field-name creq) creq))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3234 (if (equal field-name "crossref")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3235 (setq crossref-there t))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3236 (if crossref-there
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3237 (setq req creq))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3238 (if (or (> (length req) 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3239 (and (= (length req) 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3240 (not (elt (car req) 3))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3241 ;; two (or more) fields missed or one field
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3242 ;; missed and this isn't flagged alternative
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3243 ;; (notice that this fails if there are more
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3244 ;; than two alternatives in a BibTeX entry,
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3245 ;; which isn't the case momentarily)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3246 (push (list (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3247 (bibtex-beginning-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3248 (bibtex-current-line))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3249 (concat "Required field `" (caar req) "' missing"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3250 error-list))))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3251 (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
3252 (if error-list
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3253 (let ((bufnam (buffer-name))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3254 (dir default-directory))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3255 (setq error-list
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3256 (sort error-list
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3257 (lambda (a b)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3258 (< (car a) (car b)))))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3259 (let ((pop-up-windows t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3260 (pop-to-buffer nil t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3261 (switch-to-buffer
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3262 (get-buffer-create "*BibTeX validation errors*") t)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3263 ;; don't use switch-to-buffer-other-window, since this
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3264 ;; doesn't allow the second parameter NORECORD
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3265 (setq default-directory dir)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3266 (toggle-read-only -1)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3267 (compilation-mode)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3268 (delete-region (point-min) (point-max))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3269 (goto-char (point-min))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3270 (insert "BibTeX mode command `bibtex-validate'\n"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3271 (if syntax-error
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3272 "Maybe undetected errors due to syntax errors. Correct and validate again."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3273 "")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3274 "\n")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3275 (dolist (err error-list)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3276 (insert bufnam ":" (number-to-string (elt err 0))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3277 ": " (elt err 1) "\n"))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3278 (compilation-parse-errors nil nil)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3279 (setq compilation-old-error-list compilation-error-list)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3280 ;; this is necessary to avoid reparsing of buffer if you
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3281 ;; switch to compilation buffer and enter `compile-goto-error'
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3282 (set-buffer-modified-p nil)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3283 (toggle-read-only 1)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3284 (goto-char (point-min))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3285 (other-window -1)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3286 ;; return nil
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3287 nil)
20907
9a55a557cb5a (bibtex-autokey-names): Change number tag to integer.
Richard M. Stallman <rms@gnu.org>
parents: 20866
diff changeset
3288 (if (bibtex-mark-active)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3289 (message "Region is syntactically correct")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3290 (message "Buffer is syntactically correct"))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3291 t)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3292
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3293 (defun bibtex-next-field (arg)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3294 "Find end of text of next BibTeX field; with ARG, to its beginning."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3295 (interactive "P")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3296 (bibtex-inside-field)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3297 (let ((start (point)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3298 (condition-case ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3299 (let ((bounds (bibtex-enclosing-field)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3300 (goto-char (bibtex-end-of-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3301 (forward-char 2))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3302 (error
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3303 (goto-char start)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3304 (end-of-line)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3305 (forward-char))))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3306 (bibtex-find-text arg t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3307
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3308 (defun bibtex-find-text (arg &optional as-if-interactive no-error)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3309 "Go to end of text of current field; with ARG, go to beginning."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3310 (interactive "P")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3311 (bibtex-inside-field)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3312 (let ((bounds (bibtex-enclosing-field (or (interactive-p)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3313 as-if-interactive))))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3314 (if bounds
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3315 (progn (if arg
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3316 (progn (goto-char (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3317 (if (looking-at "[{\"]")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3318 (forward-char)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3319 (goto-char (bibtex-end-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3320 (if (or (= (preceding-char) ?})
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3321 (= (preceding-char) ?\"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3322 (forward-char -1)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3323 (if bibtex-help-message
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3324 (bibtex-print-help-message)))
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3325 (beginning-of-line)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3326 (cond ((setq bounds (bibtex-parse-string))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3327 (goto-char (if arg
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3328 (bibtex-start-of-text-in-string bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3329 (bibtex-end-of-text-in-string bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3330 ((looking-at bibtex-entry-maybe-empty-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3331 (goto-char (if arg
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3332 (match-beginning bibtex-key-in-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3333 (match-end 0))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3334 (t
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3335 (unless no-error
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3336 (error "Not on BibTeX field")))))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3337
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3338 (defun bibtex-remove-OPT-or-ALT ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3339 "Remove the string starting optional/alternative fields.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3340 Align text and go thereafter to end of text."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3341 (interactive)
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3342 (bibtex-inside-field)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3343 (let ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3344 (bounds (bibtex-enclosing-field)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3345 (save-excursion
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3346 (goto-char (bibtex-start-of-name-in-field bounds))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3347 (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
3348 (delete-region (match-beginning 0) (match-end 0))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3349 ;; make field non-OPT
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3350 (search-forward "=")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3351 (forward-char -1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3352 (delete-horizontal-space)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3353 (if bibtex-align-at-equal-sign
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3354 (indent-to-column (- bibtex-text-indentation 2))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3355 (insert " "))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3356 (search-forward "=")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3357 (delete-horizontal-space)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3358 (if bibtex-align-at-equal-sign
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3359 (insert " ")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3360 (indent-to-column bibtex-text-indentation))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3361 (bibtex-inside-field)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3362
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3363 (defun bibtex-remove-delimiters ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3364 "Remove \"\" or {} around string."
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3365 (interactive)
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3366 (save-excursion
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3367 (bibtex-inside-field)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3368 (let ((bounds (bibtex-enclosing-field)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3369 (goto-char (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3370 (delete-char 1)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3371 (goto-char (1- (bibtex-end-of-text-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3372 (delete-backward-char 1))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3373
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3374 (defun bibtex-kill-field (&optional copy-only)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3375 "Kill the entire enclosing BibTeX field.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3376 With prefix arg COPY-ONLY, copy the current field to `bibtex-field-kill-ring',
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3377 but do not actually kill it."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3378 (interactive "P")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3379 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3380 (bibtex-inside-field)
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3381 (let* ((case-fold-search t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3382 (bounds (bibtex-enclosing-field))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3383 (end (bibtex-end-of-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3384 (beg (bibtex-start-of-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3385 (goto-char end)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3386 (skip-chars-forward " \t\n,")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3387 (push (list 'field (bibtex-name-in-field bounds)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3388 (bibtex-text-in-field-bounds bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3389 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
3390 (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
3391 (setcdr (nthcdr (1- bibtex-field-kill-ring-max)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3392 bibtex-field-kill-ring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3393 nil))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3394 (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
3395 (unless copy-only
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3396 (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
3397 (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
3398
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3399 (defun 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
3400 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3401 (bibtex-kill-field t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3402
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3403 (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
3404 "Kill the entire enclosing BibTeX entry.
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3405 With prefix arg COPY-ONLY the current entry to
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
3406 `bibtex-entry-kill-ring', 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
3407 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3408 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3409 (let* ((case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3410 (beg (bibtex-beginning-of-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3411 (end (progn (bibtex-end-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3412 (if (re-search-forward
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3413 bibtex-entry-maybe-empty-head nil 'move)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3414 (goto-char (match-beginning 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3415 (point))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3416 (push (list 'entry (buffer-substring-no-properties beg end))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3417 bibtex-entry-kill-ring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3418 (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
3419 (setcdr (nthcdr (1- bibtex-entry-kill-ring-max)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3420 bibtex-entry-kill-ring)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3421 nil))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3422 (setq bibtex-entry-kill-ring-yank-pointer bibtex-entry-kill-ring)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3423 (unless copy-only
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3424 (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
3425 (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
3426
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3427 (defun 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
3428 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3429 (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
3430
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3431 (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
3432 "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
3433 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
3434 With argument N, reinsert the Nth most recently killed BibTeX item.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3435 See also the command \\[bibtex-yank-pop]]."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3436 (interactive "*p")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3437 (bibtex-insert-current-kill (1- n))
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3438 (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
3439
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3440 (defun bibtex-yank-pop (n)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3441 "Replace just-yanked killed BibTeX item with a different.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3442 This command is allowed only immediately after a `bibtex-yank' or a
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3443 `bibtex-yank-pop'.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3444 At such a time, the region contains a reinserted previously killed
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3445 BibTeX item. `bibtex-yank-pop' deletes that item and inserts in its
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3446 place a different killed BibTeX item.
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3447
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3448 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
3449 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
3450 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
3451
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3452 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
3453 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
3454 (interactive "*p")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3455 (if (not (eq last-command 'bibtex-yank))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3456 (error "Previous command was not a BibTeX yank"))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3457 (setq this-command 'bibtex-yank)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3458 (let ((inhibit-read-only t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3459 (delete-region (point) (mark t))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3460 (bibtex-insert-current-kill n)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3461
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3462 (defun bibtex-empty-field ()
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3463 "Delete the text part of the current field, replace with empty text."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3464 (interactive)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3465 (bibtex-inside-field)
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3466 (let ((bounds (bibtex-enclosing-field)))
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3467 (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
3468 (delete-region (point) (bibtex-end-of-text-in-field bounds))
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3469 (insert (concat (bibtex-field-left-delimiter)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3470 (bibtex-field-right-delimiter)) )
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3471 (bibtex-find-text t)))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3472
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
3473 (defun bibtex-pop-previous (arg)
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
3474 "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
3475 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
3476 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
3477 (interactive "p")
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
3478 (bibtex-pop arg 'previous))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3479
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3480 (defun bibtex-pop-next (arg)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3481 "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
3482 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
3483 intermixed with \\[bibtex-pop-previous] (bibtex-pop-previous)."
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3484 (interactive "p")
14789
d68b71228abd (bibtex-pop): New generic function which unifies the
Richard M. Stallman <rms@gnu.org>
parents: 14410
diff changeset
3485 (bibtex-pop arg 'next))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3486
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3487 (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
3488 "Finish editing the current BibTeX entry and clean it up.
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3489 Check that no required fields are empty and formats entry dependent
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3490 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
3491 If the reference key of the entry is empty or a prefix argument is given,
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3492 calculate a new reference key. (Note: this will only work if fields in entry
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3493 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
3494 '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
3495 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
3496 At end of the cleaning process, the functions in
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3497 `bibtex-clean-entry-hook' are called with region narrowed to entry."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3498 ;; Opt. arg called-by-reformat is t if bibtex-clean-entry
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3499 ;; is called by bibtex-reformat
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3500 (interactive "P")
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3501 (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
3502 entry-type key)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3503 (bibtex-beginning-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
3504 (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
3505 (when (re-search-forward bibtex-entry-maybe-empty-head nil t)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3506 (setq entry-type (downcase (bibtex-type-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
3507 (setq key (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
3508 ;; formatting
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3509 (cond ((equal entry-type "preamble")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3510 ;; (bibtex-format-preamble)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3511 (error "No clean up of @Preamble entries"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3512 ((equal entry-type "string"))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3513 ;; (bibtex-format-string)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3514 (t (bibtex-format-entry)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3515 ;; set key
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3516 (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
3517 (setq key (bibtex-generate-autokey))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3518 (if bibtex-autokey-edit-before-use
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3519 (setq key (bibtex-read-key "Key to use: " key)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3520 (re-search-forward bibtex-entry-maybe-empty-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3521 (if (match-beginning bibtex-key-in-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3522 (delete-region (match-beginning bibtex-key-in-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3523 (match-end bibtex-key-in-head)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3524 (insert 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
3525 ;; sorting
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3526 (let* ((start (bibtex-beginning-of-entry))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3527 (end (progn (bibtex-end-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3528 (if (re-search-forward
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3529 bibtex-entry-maybe-empty-head nil 'move)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3530 (goto-char (match-beginning 0)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3531 (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3532 (entry (buffer-substring start end))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3533 (index (progn (goto-char start)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3534 (bibtex-entry-index))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3535 (delete-region start end)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3536 (unless (prog1 (or called-by-reformat
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3537 (if (and bibtex-maintain-sorted-entries
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3538 (not (and bibtex-sort-ignore-string-entries
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3539 (equal entry-type "string"))))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3540 (bibtex-prepare-new-entry index)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3541 (not (bibtex-find-entry (car index)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3542 (insert entry)
13728
4b7903cfa7ee (bibtex-auto-fill-function): Adapted for use with
Karl Heuer <kwzh@gnu.org>
parents: 12770
diff changeset
3543 (forward-char -1)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3544 (bibtex-beginning-of-entry) ; moves backward
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3545 (re-search-forward bibtex-entry-head))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3546 (error "New inserted entry yields duplicate 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
3547 ;; final clean up
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3548 (unless called-by-reformat
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3549 (save-excursion
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3550 (save-restriction
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3551 (bibtex-narrow-to-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
3552 ;; Only update the list of keys if it has been built already.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3553 (cond ((equal entry-type "string")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3554 (if (listp bibtex-strings) (bibtex-parse-strings t)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3555 ((listp bibtex-reference-keys) (bibtex-parse-keys t)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3556 (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
3557
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3558 (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
3559 "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
3560 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
3561 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
3562 (let ((end-field (copy-marker (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
3563 (goto-char (bibtex-start-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
3564 (if justify
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3565 (progn
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3566 (forward-char)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3567 (bibtex-delete-whitespace)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3568 (open-line 1)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3569 (forward-char)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3570 (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
3571 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
3572 (re-search-forward "[ \t\n]*=" 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
3573 (replace-match "=")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3574 (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
3575 (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
3576 (indent-to-column
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3577 (+ bibtex-entry-offset (- 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
3578 (insert " "))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3579 (forward-char)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3580 (bibtex-delete-whitespace)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3581 (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
3582 (insert " ")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3583 (indent-to-column bibtex-text-indentation)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3584 (re-search-forward "[ \t\n]*=[ \t\n]*" 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
3585 (while (re-search-forward "[ \t\n]+" end-field 'move)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3586 (replace-match " "))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3587 (do-auto-fill)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3588 (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
3589
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3590 (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
3591 "Like \\[fill-paragraph], but fill current BibTeX field.
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3592 Optional prefix arg JUSTIFY non-nil means 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
3593 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
3594 (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
3595 (let ((pnt (copy-marker (point)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3596 (bounds (bibtex-enclosing-field)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3597 (when bounds
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3598 (bibtex-fill-field-bounds bounds justify)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3599 (goto-char pnt))))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3600
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3601 (defun bibtex-fill-entry ()
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3602 "Fill current BibTeX entry.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3603 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
3604 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
3605 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
3606 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
3607 (interactive "*")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3608 (let ((pnt (copy-marker (point)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3609 (end (copy-marker (bibtex-end-of-entry)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3610 bounds)
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3611 (bibtex-beginning-of-entry)
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
3612 (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
3613 (indent-to-column bibtex-entry-offset)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3614 (while (setq bounds (bibtex-search-forward-field bibtex-field-name end))
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3615 (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
3616 (if (looking-at ",")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3617 (forward-char))
18247
ae094c1a4334 (bibtex-delete-whitespace, bibtex-current-line)
Richard M. Stallman <rms@gnu.org>
parents: 18212
diff changeset
3618 (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
3619 (open-line 1)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3620 (forward-char)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3621 (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
3622 (goto-char pnt)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3623
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3624 (defun bibtex-reformat (&optional additional-options called-by-convert-alien)
19461
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
3625 "Reformat all BibTeX entries in buffer or region.
6b67f20dd710 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 19460
diff changeset
3626 With prefix argument, read options for reformatting from minibuffer.
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3627 With \\[universal-argument] \\[universal-argument] prefix argument, reuse previous answers (if any) again.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3628 If mark is active it reformats entries in region, if not in whole buffer."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3629 (interactive "*P")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3630 (let* ((pnt (point))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3631 (use-previous-options
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3632 (and (equal (prefix-numeric-value additional-options) 16)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3633 (or bibtex-reformat-previous-options
27701
5e135f0faf1d (bibtex-mode): Replaced manual splitting of path
Gerd Moellmann <gerd@gnu.org>
parents: 26711
diff changeset
3634 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
3635 (bibtex-entry-format
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3636 (if additional-options
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3637 (if use-previous-options
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3638 bibtex-reformat-previous-options
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3639 (setq bibtex-reformat-previous-options
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3640 (delq nil (list
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3641 (if (or called-by-convert-alien
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3642 (y-or-n-p "Realign entries (recommended)? "))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3643 'realign)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3644 (if (y-or-n-p "Remove empty optional and alternative fields? ")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3645 'opts-or-alts)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3646 (if (y-or-n-p "Remove delimiters around pure numerical fields? ")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3647 'numerical-fields)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3648 (if (y-or-n-p (concat (if bibtex-comma-after-last-field "Insert" "Remove")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3649 " comma at end of entry? "))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3650 'last-comma)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3651 (if (y-or-n-p "Replace double page dashes by single ones? ")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3652 'page-dashes)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3653 (if (y-or-n-p "Force delimiters? ")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3654 'delimiters)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3655 (if (y-or-n-p "Unify case of entry types and field names? ")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3656 'unify-case)))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3657 '(realign)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3658 (reformat-reference-keys (if additional-options
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3659 (if use-previous-options
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3660 bibtex-reformat-previous-reference-keys
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3661 (setq bibtex-reformat-previous-reference-keys
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3662 (y-or-n-p "Generate new reference keys automatically? ")))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3663 bibtex-autokey-edit-before-use
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3664 (bibtex-sort-ignore-string-entries t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3665 (start-point (if (bibtex-mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3666 (region-beginning)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3667 (bibtex-beginning-of-first-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3668 (bibtex-skip-to-valid-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3669 (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3670 (end-point (if (bibtex-mark-active)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3671 (region-end)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3672 (point-max))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3673 (save-restriction
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3674 (narrow-to-region start-point end-point)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3675 (when (memq 'realign bibtex-entry-format)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3676 (goto-char (point-min))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3677 (while (re-search-forward bibtex-valid-entry-whitespace-re nil t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3678 (replace-match "\n\\1")))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3679 (goto-char start-point)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3680 (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
3681 (bibtex-map-entries (lambda (key beg end)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3682 (bibtex-progress-message)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3683 (bibtex-clean-entry reformat-reference-keys t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3684 (when (memq 'realign 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
3685 (goto-char end)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3686 (bibtex-delete-whitespace)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3687 (open-line 2))))
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3688 (bibtex-progress-message 'done))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3689 (when (and reformat-reference-keys
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3690 bibtex-maintain-sorted-entries
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3691 (not called-by-convert-alien))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3692 (bibtex-sort-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
3693 (kill-local-variable '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
3694 (goto-char pnt)))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3695
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3696 (defun bibtex-convert-alien (&optional do-additional-reformatting)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3697 "Convert an alien BibTeX buffer to be fully usable by BibTeX mode.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3698 If a file does not conform with some standards used by BibTeX mode,
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3699 some of the high-level features of BibTeX mode will not be available.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3700 This function tries to convert current buffer to conform with these standards.
18212
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3701 With prefix argument DO-ADDITIONAL-REFORMATTING
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3702 non-nil, read options for reformatting entries from minibuffer."
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3703 (interactive "*P")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3704 (message "Starting to validate buffer...")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3705 (sit-for 1 nil t)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3706 (goto-char (point-min))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3707 (while (re-search-forward "[ \t\n]+@" nil t)
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3708 (replace-match "\n@"))
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3709 (message
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3710 "If errors occur, correct them and call `bibtex-convert-alien' again")
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3711 (sit-for 5 nil t)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3712 (deactivate-mark) ; So bibtex-validate works on the whole buffer.
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3713 (when (let (bibtex-maintain-sorted-entries)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3714 (bibtex-validate))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3715 (message "Starting to reformat entries...")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3716 (sit-for 2 nil t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3717 (bibtex-reformat do-additional-reformatting t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3718 (when bibtex-maintain-sorted-entries
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3719 (message "Starting to sort buffer...")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3720 (bibtex-sort-buffer))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3721 (goto-char (point-max))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3722 (message "Buffer is now parsable. Please save it.")))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3723
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3724 (defun bibtex-complete ()
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3725 "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
3726 If point is inside key or crossref field perform key completion based on
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3727 `bibtex-reference-keys'. Inside any other field perform string
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3728 completion based on `bibtex-strings'. An error is signaled if point
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3729 is outside key or BibTeX field."
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3730 (interactive)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3731 (let* ((pnt (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3732 (case-fold-search t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3733 bounds compl)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3734 (save-excursion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3735 (if (and (setq bounds (bibtex-enclosing-field t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3736 (>= pnt (bibtex-start-of-text-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3737 (<= pnt (bibtex-end-of-text-in-field bounds)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3738 (progn
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3739 (goto-char (bibtex-start-of-name-in-field bounds))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3740 (setq compl (if (string= "crossref"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3741 (downcase
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3742 (buffer-substring-no-properties
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3743 (if (looking-at "\\(OPT\\)\\|\\(ALT\\)")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3744 (match-end 0)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3745 (point))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3746 (bibtex-end-of-name-in-field bounds))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3747 'key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3748 'str)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3749 (bibtex-beginning-of-entry)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3750 (if (and (re-search-forward bibtex-entry-maybe-empty-head nil t)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3751 ;; point is inside a key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3752 (or (and (match-beginning bibtex-key-in-head)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3753 (>= pnt (match-beginning bibtex-key-in-head))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3754 (<= pnt (match-end bibtex-key-in-head)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3755 ;; or point is on empty key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3756 (and (not (match-beginning bibtex-key-in-head))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3757 (= pnt (match-end 0)))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3758 (setq compl 'key))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3759
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3760 (cond ((equal compl 'key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3761 ;; key completion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3762 (setq choose-completion-string-functions
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3763 (lambda (choice buffer mini-p base-size)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3764 (bibtex-choose-completion-string choice buffer mini-p base-size)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3765 (if bibtex-complete-key-cleanup
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3766 (funcall bibtex-complete-key-cleanup choice))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3767 ;; return t (required by choose-completion-string-functions)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3768 t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3769 (let ((choice (bibtex-complete-internal bibtex-reference-keys)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3770 (if bibtex-complete-key-cleanup
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3771 (funcall bibtex-complete-key-cleanup choice))))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3772
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3773 ((equal compl 'str)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3774 ;; string completion
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3775 (setq choose-completion-string-functions
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3776 (lambda (choice buffer mini-p base-size)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3777 (bibtex-choose-completion-string choice buffer mini-p base-size)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3778 (bibtex-complete-string-cleanup choice)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3779 ;; return t (required by choose-completion-string-functions)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3780 t))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3781 (bibtex-complete-string-cleanup (bibtex-complete-internal bibtex-strings)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3782
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3783 (t (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
3784
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3785 (defun bibtex-Article ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3786 "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
3787 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3788 (bibtex-entry "Article"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3789
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3790 (defun bibtex-Book ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3791 "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
3792 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3793 (bibtex-entry "Book"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3794
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3795 (defun bibtex-Booklet ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3796 "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
3797 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3798 (bibtex-entry "Booklet"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3799
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3800 (defun bibtex-InBook ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3801 "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
3802 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3803 (bibtex-entry "InBook"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3804
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3805 (defun bibtex-InCollection ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3806 "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
3807 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3808 (bibtex-entry "InCollection"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3809
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3810 (defun bibtex-InProceedings ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3811 "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
3812 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3813 (bibtex-entry "InProceedings"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3814
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3815 (defun bibtex-Manual ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3816 "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
3817 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3818 (bibtex-entry "Manual"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3819
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3820 (defun bibtex-MastersThesis ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3821 "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
3822 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3823 (bibtex-entry "MastersThesis"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3824
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3825 (defun bibtex-Misc ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3826 "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
3827 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3828 (bibtex-entry "Misc"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3829
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3830 (defun bibtex-PhdThesis ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3831 "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
3832 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3833 (bibtex-entry "PhdThesis"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3834
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3835 (defun bibtex-Proceedings ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3836 "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
3837 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3838 (bibtex-entry "Proceedings"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3839
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3840 (defun bibtex-TechReport ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3841 "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
3842 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3843 (bibtex-entry "TechReport"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3844
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3845 (defun bibtex-Unpublished ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3846 "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
3847 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3848 (bibtex-entry "Unpublished"))
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3849
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3850 (defun bibtex-String (&optional key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3851 "Insert a new BibTeX @String entry with key 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
3852 (interactive (list (completing-read "String key: " 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
3853 nil nil nil 'bibtex-key-history)))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3854 (let ((bibtex-maintain-sorted-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
3855 (if (not bibtex-sort-ignore-string-entries)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3856 bibtex-maintain-sorted-entries))
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3857 endpos)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3858 (unless (bibtex-prepare-new-entry (list key nil "String"))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3859 (error "Entry with key `%s' already exists" key))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3860 (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
3861 (indent-to-column bibtex-entry-offset)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3862 (insert "@String"
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3863 (bibtex-entry-left-delimiter))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3864 (if key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3865 (insert key)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3866 (setq endpos (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3867 (insert " = "
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3868 (bibtex-field-left-delimiter))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3869 (if key
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3870 (setq endpos (point)))
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3871 (insert (bibtex-field-right-delimiter)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3872 (bibtex-entry-right-delimiter)
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3873 "\n")
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3874 (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
3875
3864648e9b4f (bibtex-mode-map): Changed the binding of the C-TAB
Richard M. Stallman <rms@gnu.org>
parents: 17700
diff changeset
3876 (defun bibtex-Preamble ()
22563
2e2a71dfec63 Numerous documentation fixups.
Richard M. Stallman <rms@gnu.org>
parents: 21169
diff changeset
3877 "Insert a new BibTeX @Preamble entry."
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3878 (interactive "*")
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3879 (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
3880 (indent-to-column bibtex-entry-offset)
51415
762217a72cae Long overdue merge.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49599
diff changeset
3881 (insert "@Preamble"
51743
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3882 (bibtex-entry-left-delimiter))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3883 (let ((endpos (point)))
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3884 (insert (bibtex-entry-right-delimiter)
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3885 "\n")
f63c242330b2 2003-06-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 51416
diff changeset
3886 (goto-char endpos)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3887
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3888
12700
b3a8ee2da96a Add keywords and comments as per conventions.
Richard M. Stallman <rms@gnu.org>
parents: 12028
diff changeset
3889 ;; Make BibTeX a Feature
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3890
10219
d97313bb6f39 (bibtex-string, bibtex-preamble): Use forward-line.
Richard M. Stallman <rms@gnu.org>
parents: 10106
diff changeset
3891 (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
3892
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51743
diff changeset
3893 ;;; 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
3894 ;;; bibtex.el ends here