Annotation of 43BSDReno/contrib/emacs-18.55/lisp/bibtex.el, revision 1.1

1.1     ! root        1: ;;; Simple BibTeX mode for GNU Emacs
        !             2: ;;; Bengt Martensson 87-06-28
        !             3: ;;; changes by Marc Shapiro [email protected] 15-oct-1986
        !             4: ;;;  (align long lines nicely; C-c C-o checks for the "OPT" string;
        !             5: ;;;   TAB goes to the end of the string; use lower case; use
        !             6: ;;;   run-hooks)
        !             7: ;;; Marc Shapiro 19-oct-1987
        !             8: ;;;  add X window menu option; bug fixes. TAB, LFD, C-c " and C-c C-o now
        !             9: ;;;  behave consistently; deletion never occurs blindly.
        !            10: ;;; Marc Shapiro 3-nov-87
        !            11: ;;;  addition for France: DEAthesis
        !            12: ;;; Skip Montanaro <steinmetz!sprite!montanaro> 7-dec-87, Shapiro 10-dec-87
        !            13: ;;;  before inserting an entry, make sure we are outside of a bib entry
        !            14: ;;; Marc Shapiro 14-dec-87
        !            15: ;;;  Cosmetic fixes.  Fixed small bug in bibtex-move-outside-of-entry.
        !            16: 
        !            17: ;;; NOTE by Marc Shapiro, 14-dec-87:
        !            18: ;;; (bibtex-x-environment) binds an X menu for bibtex mode to x-button-c-right.
        !            19: ;;; Trouble is, in Emacs 18.44 you can't have a mode-specific mouse binding,
        !            20: ;;; so it will remain active in all windows.  Yuck!
        !            21: 
        !            22: ;;; Bengt Martensson 88-05-06:
        !            23: ;;; Added Sun menu support.  Locally bound to right mouse button in 
        !            24: ;;; bibtex-mode.  Emacs 18.49 allows local mouse bindings!!
        !            25: ;;; Commented out vtxxx-keys and DEAthesis.  Changed documentation slightly.
        !            26: 
        !            27: (defvar bibtex-mode-syntax-table nil "")
        !            28: (defvar bibtex-mode-abbrev-table nil "")
        !            29: (define-abbrev-table 'bibtex-mode-abbrev-table ())
        !            30: (defvar bibtex-mode-map (make-sparse-keymap) "")
        !            31: 
        !            32: (defun bibtex-mode () 
        !            33:   "Major mode for editing bibtex files.  Commands:
        !            34: \\{bibtex-mode-map}
        !            35: 
        !            36: A command such as \\[bibtex-Book] will outline the fields for a BibTeX
        !            37: book entry.
        !            38: 
        !            39: The optional fields are preceded by ""OPT"", thus ignored by BibTeX.
        !            40: Use \\[bibtex-remove-opt] to remove ""OPT"" on the current line.
        !            41: 
        !            42: Use \\[bibtex-find-it] to position the dot at the end of the string on the same line.
        !            43: Use \\[bibtex-next-position] to move to the next position to fill in.  Use \\[kill-current-line]
        !            44: to kill the whole line.
        !            45: 
        !            46: M-x bibtex-x-environment binds a mode-specific X menu to control+right
        !            47: mouse button.
        !            48: M-x bibtex-sun-environment binds a mode-specific Sun menu to right
        !            49: mouse button.
        !            50: 
        !            51: Fields:
        !            52:     address
        !            53:            Publisher's address
        !            54:     annote
        !            55:            Long annotation used for annotated bibliographies (begins sentence)
        !            56:     author
        !            57:            Name(s) of author(s), in BibTeX name format
        !            58:     booktitle
        !            59:            Book title when the thing being referenced isn't the whole book.
        !            60:            For book entries, the title field should be used instead.
        !            61:     chapter
        !            62:            Chapter number
        !            63:     edition
        !            64:            Edition of a book (e.g., ""second"")
        !            65:     editor
        !            66:            Name(s) of editor(s), in BibTeX name format.
        !            67:            If there is also an author field, then the editor field should be
        !            68:            for the book or collection that the work appears in
        !            69:     howpublished
        !            70:             How something strange has been published (begins sentence)
        !            71:     institution
        !            72:            Sponsoring institution
        !            73:     journal
        !            74:            Journal name (macros are provided for many)
        !            75:     key
        !            76:            Alphabetizing and labeling key (needed when no author or editor)
        !            77:     month
        !            78:            Month (macros are provided)
        !            79:     note
        !            80:            To help the reader find a reference (begins sentence)
        !            81:     number
        !            82:            Number of a journal or technical report
        !            83:     organization
        !            84:            Organization (sponsoring a conference)
        !            85:     pages
        !            86:            Page number or numbers (use `--' to separate a range)
        !            87:     publisher
        !            88:            Publisher name
        !            89:     school
        !            90:            School name (for theses)
        !            91:     series
        !            92:            The name of a series or set of books.
        !            93:            An individual book will will also have it's own title
        !            94:     title
        !            95:            The title of the thing being referenced
        !            96:     type
        !            97:            Type of a Techreport (e.g., ""Research Note"") to be used instead of
        !            98:            the default ""Technical Report""
        !            99:     volume
        !           100:            Volume of a journal or multivolume work
        !           101:     year
        !           102:            Year---should contain only numerals
        !           103: ---------------------------------------------------------
        !           104: Entry to this mode calls the value of bibtex-mode-hook
        !           105: if that value is non-nil."
        !           106:   (interactive)
        !           107:   (kill-all-local-variables)
        !           108:   (if (not bibtex-mode-syntax-table)
        !           109:       (setq bibtex-mode-syntax-table (copy-syntax-table)))
        !           110:   (set-syntax-table bibtex-mode-syntax-table)
        !           111:   (modify-syntax-entry ?\$ "$$  ")
        !           112:   (modify-syntax-entry ?\% "<   ")
        !           113:   (modify-syntax-entry ?\f ">   ")
        !           114:   (modify-syntax-entry ?\n ">   ")
        !           115:   (modify-syntax-entry ?'  "w   ")
        !           116:   (modify-syntax-entry ?@  "w   ")
        !           117:   (use-local-map bibtex-mode-map)
        !           118:   (setq major-mode 'bibtex-mode)
        !           119: 
        !           120: 
        !           121:   (setq mode-name "BibTeX")
        !           122:   (set-syntax-table bibtex-mode-syntax-table)
        !           123:   (setq local-abbrev-table bibtex-mode-abbrev-table)
        !           124:   (make-local-variable 'paragraph-start)
        !           125:   (setq paragraph-start "^[ \f\n\t]*$")
        !           126: 
        !           127:   (define-key bibtex-mode-map "\t" 'bibtex-find-it)
        !           128:   (define-key bibtex-mode-map "\n" 'bibtex-next-position)
        !           129:   ;;(define-key bibtex-mode-map "\e[25~" 'bibtex-next-position)
        !           130:   (define-key bibtex-mode-map "\C-c\"" 'bibtex-remove-double-quotes)
        !           131:   ;;(define-key bibtex-mode-map "\C-c\eOS" 'kill-current-line)
        !           132:   (define-key bibtex-mode-map "\C-c\C-k" 'kill-current-line)
        !           133:   (define-key bibtex-mode-map "\C-c\C-a" 'bibtex-Article)
        !           134:   (define-key bibtex-mode-map "\C-c\C-b" 'bibtex-Book)
        !           135:   ;;(define-key bibtex-mode-map "\C-c\C-d" 'bibtex-DEAthesis)
        !           136:   (define-key bibtex-mode-map "\C-c\C-c" 'bibtex-InProceedings)
        !           137:   (define-key bibtex-mode-map "\C-c\C-i" 'bibtex-InBook)
        !           138:   (define-key bibtex-mode-map "\C-ci" 'bibtex-InCollection)
        !           139:   (define-key bibtex-mode-map "\C-cI" 'bibtex-InProceedings)
        !           140:   (define-key bibtex-mode-map "\C-c\C-m" 'bibtex-Manual)
        !           141:   (define-key bibtex-mode-map "\C-cm" 'bibtex-MastersThesis)
        !           142:   (define-key bibtex-mode-map "\C-cM" 'bibtex-Misc)
        !           143:   (define-key bibtex-mode-map "\C-c\C-o" 'bibtex-remove-opt)
        !           144:   (define-key bibtex-mode-map "\C-c\C-p" 'bibtex-PhdThesis)
        !           145:   (define-key bibtex-mode-map "\C-cp" 'bibtex-Proceedings)
        !           146:   (define-key bibtex-mode-map "\C-c\C-t" 'bibtex-TechReport)
        !           147:   (define-key bibtex-mode-map "\C-c\C-s" 'bibtex-string)
        !           148:   (define-key bibtex-mode-map "\C-c\C-u" 'bibtex-Unpublished)
        !           149:   (define-key bibtex-mode-map "\C-c?" 'describe-mode)
        !           150: 
        !           151:                                        ; nice alignements
        !           152:   (auto-fill-mode 1)
        !           153:   (setq left-margin 17)
        !           154: 
        !           155:   (run-hooks 'bibtex-mode-hook))
        !           156: 
        !           157: (defun bibtex-move-outside-of-entry ()
        !           158:    "Make sure we are outside of a bib entry"
        !           159:    (if (or
        !           160:        (= (point) (point-max))
        !           161:        (= (point) (point-min))
        !           162:        (looking-at "[ \n]*@")
        !           163:        )
        !           164:        t
        !           165:        (progn
        !           166:          (backward-paragraph)
        !           167:          (forward-paragraph)))
        !           168:    (re-search-forward "[ \t\n]*" (point-max) t))
        !           169: 
        !           170: (defun bibtex-entry (entry-type required optional)
        !           171:   (bibtex-move-outside-of-entry)
        !           172:   (insert (concat "@" entry-type "{,\n\n}\n\n"))
        !           173:   (previous-line 3)
        !           174:   (insert (mapconcat 'bibtex-make-entry required ",\n"))
        !           175:   (if required (insert ",\n"))
        !           176:   (insert (mapconcat 'bibtex-make-opt-entry optional ",\n"))
        !           177:   (up-list -1)
        !           178:   (forward-char 1))
        !           179: 
        !           180: (defun bibtex-make-entry (str)
        !           181:   (interactive "s")
        !           182:   (concat "  " str " = \t"""""))
        !           183: 
        !           184: (defun bibtex-make-opt-entry (str)
        !           185:   (interactive "s")
        !           186:   (concat "  OPT" str " = \t"""""))
        !           187:   
        !           188: (defun bibtex-Article ()
        !           189:   (interactive)
        !           190:   (bibtex-entry "Article" '("author" "title" "journal" "year")
        !           191:                '("volume" "number" "pages" "month" "note")))
        !           192: 
        !           193: (defun bibtex-Book ()
        !           194:   (interactive)
        !           195:   (bibtex-entry "Book" '("author" "title" "publisher" "year")
        !           196:                '("editor" "volume" "series" "address"
        !           197:                           "edition" "month" "note")))
        !           198: 
        !           199: (defun bibtex-Booklet ()
        !           200:   (interactive)
        !           201:   (bibtex-entry "Booklet" '("title")
        !           202:                '("author" "howpublished" "address" "month" "year" "note")))
        !           203: 
        !           204: ;;; France: Dipl\^{o}me d'Etudes Approfondies (similar to Master's)
        !           205: ;(defun bibtex-DEAthesis ()
        !           206: ;  (interactive)
        !           207: ;  (bibtex-entry "DEAthesis" '("author" "title" "school" "year")
        !           208: ;              '("address" "month" "note")))
        !           209: 
        !           210: (defun bibtex-InBook ()
        !           211:   (interactive)
        !           212:   (bibtex-entry "InBook" '("author" "title" "chapter" "publisher" "year")
        !           213:                '("editor" "pages" "volume" "series" "address"
        !           214:                           "edition" "month" "note")))
        !           215: 
        !           216: (defun bibtex-InCollection ()
        !           217:   (interactive)
        !           218:   (bibtex-entry "InCollection" '("author" "title" "booktitle"
        !           219:                                          "publisher" "year")
        !           220:                '("editor" "chapter" "pages" "address" "month" "note")))
        !           221: 
        !           222: 
        !           223: (defun bibtex-InProceedings ()
        !           224:   (interactive)
        !           225:   (bibtex-entry "InProceedings" '("author" "title" "booktitle" "year")
        !           226:                '("editor" "pages" "organization" "publisher"
        !           227:                           "address" "month" "note")))
        !           228: 
        !           229: (defun bibtex-Manual ()
        !           230:   (interactive)
        !           231:   (bibtex-entry "Manual" '("title")
        !           232:                '("author" "organization" "address" "edition" "year"
        !           233:                           "month" "note")))
        !           234: 
        !           235: (defun bibtex-MastersThesis ()
        !           236:   (interactive)
        !           237:   (bibtex-entry "MastersThesis" '("author" "title" "school" "year")
        !           238:                '("address" "month" "note")))
        !           239: 
        !           240: (defun bibtex-Misc ()
        !           241:   (interactive)
        !           242:   (bibtex-entry "Misc" '()
        !           243:                '("author" "title" "howpublished" "year" "month" "note")))
        !           244: 
        !           245: (defun bibtex-PhdThesis ()
        !           246:   (interactive)
        !           247:   (bibtex-entry "PhDThesis" '("author" "title" "school" "year")
        !           248:                '("address" "month" "note")))
        !           249: 
        !           250: (defun bibtex-Proceedings ()
        !           251:   (interactive)
        !           252:   (bibtex-entry "Proceedings" '("title" "year")
        !           253:                '("editor" "publisher" "organization"
        !           254:                           "address" "month" "note")))
        !           255: (defun bibtex-TechReport ()
        !           256:   (interactive)
        !           257:   (bibtex-entry "TechReport" '("author" "title" "institution" "year")
        !           258:                '("type" "number" "address" "month" "note")))
        !           259: 
        !           260: 
        !           261: (defun bibtex-Unpublished ()
        !           262:   (interactive)
        !           263:   (bibtex-entry "Unpublished" '("author" "title" "note")
        !           264:                '("year" "month")))
        !           265: 
        !           266: (defun bibtex-string ()
        !           267:   (interactive)
        !           268:   (bibtex-move-outside-of-entry)
        !           269:   (insert "@string{ = """"}\n")
        !           270:   (previous-line 1)
        !           271:   (forward-char 8))
        !           272: 
        !           273: (defun bibtex-next-position ()
        !           274:   "Finds next position to write in."
        !           275:   (interactive)
        !           276:   (forward-line 1)
        !           277:   (bibtex-find-it))
        !           278: 
        !           279: (defun bibtex-find-it ()
        !           280:   (interactive)
        !           281:   "Find position on current line (if possible) to add entry text."
        !           282:   (beginning-of-line)
        !           283:   (let ((beg (point)))
        !           284:     (end-of-line)
        !           285:     (search-backward "," beg t)
        !           286:          (backward-char 1)
        !           287:          (if (looking-at """")
        !           288:              t
        !           289:              (forward-char 1))
        !           290:     ))
        !           291: 
        !           292: (defun bibtex-remove-opt ()
        !           293:   "Removes the 'OPT' starting optional arguments."
        !           294:   (interactive)
        !           295:   (beginning-of-line)
        !           296:   (forward-char 2)
        !           297:   (if (looking-at "OPT")
        !           298:       (delete-char 3))
        !           299:   (bibtex-find-it))
        !           300: 
        !           301: (defun kill-current-line ()
        !           302:   "Kills the current line."
        !           303:   (interactive)
        !           304:   (beginning-of-line)
        !           305:   (kill-line 1))
        !           306: 
        !           307: (defun bibtex-remove-double-quotes ()
        !           308:   "Removes """" around string."
        !           309:   (interactive)
        !           310:   (bibtex-find-it)
        !           311:   (let
        !           312:       ((here (point))
        !           313:        (eol (progn (end-of-line) (point))))
        !           314:     (beginning-of-line)
        !           315:     (if (search-forward """" eol t)
        !           316:        (progn
        !           317:          (delete-char -1)
        !           318:          (if (search-forward """" eol t)
        !           319:              (delete-char -1)
        !           320:            ))
        !           321:       (goto-char here))
        !           322:     )
        !           323:   )
        !           324: 
        !           325: 
        !           326: ;;; X window menus for bibtex mode
        !           327: 
        !           328: (defun bibtex-x-help (arg)
        !           329:   "Mouse commands for BibTeX mode"
        !           330: 
        !           331:   (let ((selection
        !           332:         (x-popup-menu
        !           333:          arg
        !           334:          '("BibTeX commands"
        !           335:            ("Document types"
        !           336:             ("article in Conference Proceedings" . bibtex-InProceedings)
        !           337:             ("article in journal" . bibtex-Article)
        !           338:             ("Book" . bibtex-Book)
        !           339:             ("Booklet" . bibtex-Booklet)
        !           340:             ("Master's Thesis" . bibtex-MastersThesis)
        !           341:             ;;("DEA Thesis" . bibtex-DEAthesis)
        !           342:             ("PhD. Thesis" . bibtex-PhdThesis)
        !           343:             ("Technical Report" . bibtex-TechReport)
        !           344:             ("technical Manual" . bibtex-Manual)
        !           345:             ("Conference Proceedings" . bibtex-Proceedings)
        !           346:             ("in a Book" . bibtex-InBook)
        !           347:             ("in a Collection" . bibtex-InCollection)
        !           348:             ("miscellaneous" . bibtex-Misc)
        !           349:             ("unpublished" . bibtex-Unpublished)
        !           350:             )
        !           351:            ("others"
        !           352:             ("next field" . bibtex-next-position)
        !           353:             ("to end of field" . bibtex-find-it)
        !           354:             ("remove OPT" . bibtex-remove-opt)
        !           355:             ("remove quotes" . bibtex-remove-double-quotes)
        !           356:             ("remove this line" . kill-current-line)
        !           357:             ("describe BibTeX mode" . describe-mode)
        !           358:             ("string" . bibtex-string))))))
        !           359:     (and selection (call-interactively selection))))
        !           360: 
        !           361: (defun bibtex-x-environment ()
        !           362:   "Set up X menus for BibTeX mode.  Call it as bibtex-mode-hook, or interactively"
        !           363:   (interactive)
        !           364:   (require 'x-mouse)
        !           365:   (define-key mouse-map x-button-c-right 'bibtex-x-help)
        !           366:   )
        !           367: 
        !           368: ;; Please don't send anything to bug-gnu-emacs about these Sunwindows functions
        !           369: ;; since we aren't interested.  See etc/SUN-SUPPORT for the reasons why
        !           370: ;; we consider this nothing but a distraction from our work.
        !           371: 
        !           372: (defmenu bibtex-sun-entry-menu 
        !           373:   ("Article In Conf. Proc."
        !           374:    (lambda () (eval-in-window *menu-window* (bibtex-InProceedings))))
        !           375:   ("Article In Journal"
        !           376:    (lambda () (eval-in-window *menu-window* (bibtex-Article))))
        !           377:   ("Book"
        !           378:    (lambda () (eval-in-window *menu-window* (bibtex-Book))))
        !           379:   ("Booklet"
        !           380:    (lambda () (eval-in-window *menu-window* (bibtex-Booklet))))
        !           381:   ("Master's Thesis"
        !           382:    (lambda () (eval-in-window *menu-window* (bibtex-MastersThesis))))
        !           383:   ;;("DEA Thesis" bibtex-DEAthesis)
        !           384:   ("PhD. Thesis"
        !           385:    (lambda () (eval-in-window *menu-window* (bibtex-PhdThesis))))
        !           386:   ("Technical Report"
        !           387:    (lambda () (eval-in-window *menu-window* (bibtex-TechReport))))
        !           388:   ("Technical Manual"
        !           389:    (lambda () (eval-in-window *menu-window* (bibtex-Manual))))
        !           390:   ("Conference Proceedings"
        !           391:    (lambda () (eval-in-window *menu-window* (bibtex-Proceedings))))
        !           392:   ("In A Book"
        !           393:    (lambda () (eval-in-window *menu-window* (bibtex-InBook))))
        !           394:   ("In A Collection"
        !           395:    (lambda () (eval-in-window *menu-window* (bibtex-InCollection))))
        !           396:   ("Miscellaneous"
        !           397:    (lambda () (eval-in-window *menu-window* (bibtex-Misc))))
        !           398:   ("Unpublished"
        !           399:    (lambda () (eval-in-window *menu-window* (bibtex-Unpublished)))))
        !           400: 
        !           401: (defmenu bibtex-sun-menu
        !           402:   ("BibTeX menu")
        !           403:   ("add entry" . bibtex-sun-entry-menu)
        !           404:   ("add string"
        !           405:    (lambda () (eval-in-window *menu-window* (bibtex-string))))
        !           406:   ;("next field" bibtex-next-position)
        !           407:   ;("to end of field" bibtex-find-it)
        !           408: ;  ("remove OPT"
        !           409: ;   (lambda () (eval-in-window *menu-window* (bibtex-remove-opt))))
        !           410: ;  ("remove quotes"
        !           411: ;   (lambda () (eval-in-window *menu-window* (bibtex-remove-double-quotes))))
        !           412: ;  ("remove this line"
        !           413: ;   (lambda () (eval-in-window *menu-window* (kill-current-line))))
        !           414:   ("describe BibTeX mode"
        !           415:    (lambda () (eval-in-window *menu-window* (describe-mode))))
        !           416:   ("Main Emacs menu" . emacs-menu))
        !           417:  
        !           418: (defun bibtex-sun-menu-eval (window x y)
        !           419:   "Pop-up menu of BibTeX commands."
        !           420:   (sun-menu-evaluate window (1+ x) (1- y) 'bibtex-sun-menu))
        !           421: 
        !           422: (defun bibtex-sun-environment ()
        !           423:   "Set up sun menus for BibTeX mode.  Call it as bibtex-mode-hook, or interactively"
        !           424:   (interactive)
        !           425:   (local-set-mouse  '(text right) 'bibtex-sun-menu-eval))
        !           426: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.