* outline.el (outline-mode-menu-bar-map):
[bpt/emacs.git] / lisp / textmodes / bib-mode.el
index 8c7c38c..20e69e2 100644 (file)
@@ -1,12 +1,16 @@
-;;; bib-mode.el --- bib-mode, major mode for editing bib files.
+;;; bib-mode.el --- major mode for editing bib files
 
-;; Copyright (C) 1989 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005,
+;;   2006, 2007, 2008 Free Software Foundation, Inc.
+
+;; Maintainer: FSF
+;; Keywords: bib
 
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 1, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
+;;; Commentary:
 
-;; Bib-Mode
 ;;   GNU Emacs code to help maintain databases compatible with (troff)
-;;   refer and lookbib.  The file bib-file should be set to your 
+;;   refer and lookbib.  The file bib-file should be set to your
 ;;   bibliography file.  Keys are automagically inserted as you type,
 ;;   and appropriate keys are presented for various kinds of entries.
 
-(defvar bib-file "~/my-bibliography.bib" 
-   "Default name of file used by `addbib'.")
+;;; Code:
+
+(defgroup bib nil
+  "Major mode for editing bib files."
+  :prefix "bib-"
+  :group 'external
+  :group 'wp)
 
-(defvar unread-bib-file "~/to-be-read.bib"
-   "Default name of file used by `unread-bib' in Bib mode.")
+(defcustom bib-file "~/my-bibliography.bib"
+  "Default name of file used by `addbib'."
+    :type 'file
+    :group 'bib)
+
+(defcustom unread-bib-file "~/to-be-read.bib"
+   "Default name of file used by `unread-bib' in Bib mode."
+   :type 'file
+   :group 'bib)
 
 (defvar bib-mode-map (copy-keymap text-mode-map))
 (define-key bib-mode-map "\C-M" 'return-key-bib)
 (define-key bib-mode-map "\C-c\C-u" 'unread-bib)
 (define-key bib-mode-map "\C-c\C-@" 'mark-bib)
 (define-key bib-mode-map "\e`" 'abbrev-mode)
-(defvar bib-mode-abbrev-table nil
-   "Abbrev table used in Bib mode")
 
 (defun addbib ()
-   "Set up editor to add to troff bibliography file specified 
+   "Set up editor to add to troff bibliography file specified
 by global variable `bib-file'.  See description of `bib-mode'."
    (interactive)
    (find-file bib-file)
    (goto-char (point-max))
    (bib-mode)
    )
-   
-(defun bib-mode ()
-   "Mode for editing `lookbib' style bibliographies.  
+
+(define-derived-mode bib-mode text-mode "Bib"
+   "Mode for editing `lookbib' style bibliographies.
 Hit RETURN to get next % field key.
 If you want to ignore this field, just hit RETURN again.
 Use `text-mode' to turn this feature off.
 
  journal papers:                    A* T D J V N P K W X
- articles in books & proceedings:   A* T D B E* I C P K W X 
+ articles in books & proceedings:   A* T D B E* I C P K W X
  tech reports:                      A* T D R I C K W X
  books:                             A* T D I C K W X
 
@@ -65,7 +80,7 @@ A uthor               T itle          D ate           J ournal
 V olume                N umber         P age           K eywords
 B in book or proceedings       E ditor         C ity & state
 I nstitution, school, or publisher
-R eport number or 'phd thesis' or 'masters thesis' or 'draft' or 
+R eport number or 'phd thesis' or 'masters thesis' or 'draft' or
      'unnumbered' or 'unpublished'
 W here can be found locally (login name, or ailib, etc.)
 X comments (not used in indexing)
@@ -79,60 +94,50 @@ Hook can be stored in `bib-mode-hook'.
 Field keys given by variable `bib-assoc'.
 
 Commands:
-\\{bib-mode-map}
-"
-   (interactive)
-   (text-mode)
-   (use-local-map bib-mode-map)
-   (setq mode-name "Bib")
-   (setq major-mode 'bib-mode)
-   (define-abbrev-table 'bib-mode-abbrev-table ())
-   (setq local-abbrev-table bib-mode-abbrev-table)
-   (abbrev-mode 1)
-   (run-hooks 'bib-mode-hook)
-   )
-
-(defconst bib-assoc '(
-                  (" *$" . "%A ")
-                  ("%A ." . "%A ")
-                  ("%A $" . "%T ")
-                  ("%T " . "%D ")
-                  ("%D " . "%J ")
-                  ("%J ." . "%V ")
-                  ("%V " . "%N ")
-                  ("%N " . "%P ")
-                  ("%P " . "%K ")
-                  ("%K " . "%W ")
-                  ("%W " . "%X ")
-                  ("%X " . "")
-                  ("%J $" . "%B ")
-                  ("%B ." . "%E ")
-                  ("%E ." . "%E ")
-                  ("%E $" . "%I ")
-                  ("%I " . "%C ")
-                  ("%C " . "%P ")
-                  ("%B $" . "%R ")
-                  ("%R " . "%I ")
-                  )
-                  
-"Describes bibliographic database format.  A line beginning with
-the car of an entry is followed by one beginning with the cdr.
-")
+\\{bib-mode-map}"
+   (abbrev-mode 1))
+
+(defconst bib-assoc
+  '((" *$" . "%A ")
+    ("%A ." . "%A ")
+    ("%A $" . "%T ")
+    ("%T " . "%D ")
+    ("%D " . "%J ")
+    ("%J ." . "%V ")
+    ("%V " . "%N ")
+    ("%N " . "%P ")
+    ("%P " . "%K ")
+    ("%K " . "%W ")
+    ("%W " . "%X ")
+    ("%X " . "")
+    ("%J $" . "%B ")
+    ("%B ." . "%E ")
+    ("%E ." . "%E ")
+    ("%E $" . "%I ")
+    ("%I " . "%C ")
+    ("%C " . "%P ")
+    ("%B $" . "%R ")
+    ("%R " . "%I "))
+  "Describes bibliographic database format.
+A line beginning with the car of an entry is followed by one beginning
+with the cdr.")
 
 (defun bib-find-key (slots)
    (cond
       ((null slots)
         (if (bobp)
            ""
-           (progn (previous-line 1) (bib-find-key bib-assoc))))
+           (progn (forward-line -1) (bib-find-key bib-assoc))))
       ((looking-at (car (car slots)))
         (cdr (car slots)))
       (t (bib-find-key (cdr slots)))
       ))
 
 
-(defvar bib-auto-capitalize t 
-"*True to automatically capitalize appropriate fields in Bib mode.")
+(defcustom bib-auto-capitalize t
+  "*True to automatically capitalize appropriate fields in Bib mode."
+  :type 'boolean
+  :group 'bib)
 
 (defconst bib-capitalized-fields "%[AETCBIJR]")
 
@@ -157,13 +162,13 @@ the car of an entry is followed by one beginning with the cdr.
       (if (and (not empty) bib-auto-capitalize
            (looking-at bib-capitalized-fields))
        (save-excursion
-         (capitalize-title-region (+ (point) 3) end-current)))
+         (bib-capitalize-title-region (+ (point) 3) end-current)))
       (goto-char beg-current)
       (if empty
        (kill-line nil)
        (forward-line 1)
        )
-      (insert-string new-key))
+      (insert new-key))
     (newline)))
 
 (defun mark-bib ()
@@ -176,7 +181,7 @@ the car of an entry is followed by one beginning with the cdr.
    (beginning-of-line nil)
    (push-mark (point))
    (re-search-forward "^ *$" nil 2)
-   (next-line 1)
+   (forward-line 1)
    (beginning-of-line nil))
 
 (defun unread-bib ()
@@ -189,17 +194,16 @@ named by variable `unread-bib-file'."
       (append-to-file (mark) (point) unread-bib-file)))
 
 
-(defvar capitalize-title-stop-words
+(defvar bib-capitalize-title-stop-words
    (concat
       "the\\|and\\|of\\|is\\|a\\|an\\|of\\|for\\|in\\|to\\|in\\|on\\|at\\|"
       "by\\|with\\|that\\|its")
-   "Words not to be capitialized in a title (unless they're the first word
-in the title).")
+   "Words not to be capitalized in a title (unless the first word).")
 
-(defvar capitalize-title-stop-regexp
-   (concat "\\(" capitalize-title-stop-words "\\)\\(\\b\\|'\\)"))
+(defvar bib-capitalize-title-stop-regexp
+   (concat "\\(" bib-capitalize-title-stop-words "\\)\\(\\b\\|'\\)"))
 
-(defun capitalize-title-region (begin end)
+(defun bib-capitalize-title-region (begin end)
    "Like `capitalize-region', but don't capitalize stop words, except the first."
    (interactive "r")
    (let ((case-fold-search nil) (orig-syntax-table (syntax-table)))
@@ -215,22 +219,23 @@ in the title).")
               (if (looking-at "[A-Z][a-z]*[A-Z]")
                  (forward-word 1)
                  (if (let ((case-fold-search t))
-                        (looking-at capitalize-title-stop-regexp))
+                        (looking-at bib-capitalize-title-stop-regexp))
                     (downcase-word 1)
                     (capitalize-word 1)))
               ))
         (set-syntax-table orig-syntax-table))))
 
 
-(defun capitalize-title (s)
+(defun bib-capitalize-title (s)
    "Like `capitalize', but don't capitalize stop words, except the first."
    (save-excursion
       (set-buffer (get-buffer-create "$$$Scratch$$$"))
       (erase-buffer)
       (insert s)
-      (capitalize-title-region (point-min) (point-max))
+      (bib-capitalize-title-region (point-min) (point-max))
       (buffer-string)))
 
 (provide 'bib-mode)
 
+;;; arch-tag: e3a97958-3c2c-487f-9557-fafc3c98452d
 ;;; bib-mode.el ends here