X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b578f267af27af50e3c091f8c9c9eee939b69978..dcb8ac09ea4b4a500da0b9a72e230bd94f59bd3d:/lisp/textmodes/bib-mode.el diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el index 55456fdd81..20e69e2d68 100644 --- a/lisp/textmodes/bib-mode.el +++ b/lisp/textmodes/bib-mode.el @@ -1,6 +1,7 @@ -;;; 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 @@ -9,7 +10,7 @@ ;; 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 2, 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, @@ -19,49 +20,57 @@ ;; 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, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; 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. ;;; Code: -(defvar bib-file "~/my-bibliography.bib" - "Default name of file used by `addbib'.") +(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 @@ -71,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) @@ -85,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]") @@ -163,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 () @@ -182,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 () @@ -195,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 capitalized 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))) @@ -221,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