Initial revision
[bpt/emacs.git] / lisp / emacs-lisp / copyright.el
CommitLineData
0343b087
RM
1;;; Copyright (C) 1991 Free Software Foundation, Inc.
2;;; Written by Roland McGrath
3;;;
4;;; This program is free software; you can redistribute it and/or modify
5;;; it under the terms of the GNU General Public License as published by
6;;; the Free Software Foundation; either version 2, or (at your option)
7;;; any later version.
8;;;
9;;; This program is distributed in the hope that it will be useful,
10;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12;;; GNU General Public License for more details.
13;;;
14;;; A copy of the GNU General Public License can be obtained from this
15;;; program's author (send electronic mail to roland@ai.mit.edu) or from
16;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
17;;; 02139, USA.
18
19(defconst current-year (substring (current-time-string) -4)
20 "String representing the current year.")
21
22(defvar current-gpl-version "2"
23 "String representing the current version of the GPL.")
24
25(defvar replace-copying-with nil
26 "*If non-nil, replace copying notices with this file.")
27
28;;;###autoload
29(defun update-copyright (&optional replace)
30 "Update the copyright notice at the beginning of the buffer
31to indicate the current year. If optional arg REPLACE is given
32\(interactively, with prefix arg\) replace the years in the notice
33rather than adding the current year after them.
34If `replace-copying-with' is set, the copying permissions following the
35copyright are replaced as well."
36 (interactive "*P")
37 (save-excursion
38 (save-restriction
39 (widen)
40 (goto-char (point-min))
41 (if (search-forward current-year nil t)
42 (message "Copyright notice already includes %s." current-year)
43 (goto-char (point-min))
44 (or (re-search-forward
45 "[Cc]opyright[^0-9]*\\(\\([-, \t]*\\([0-9]+\\)\\)\\)+"
46 nil t)
47 (error "This buffer contains no copyright notice!"))
48 (if replace
49 (delete-region (match-beginning 1) (match-end 1))
50 (insert ", "))
51 (insert current-year)
52 (message "Copyright updated to %s%s."
53 (if replace "" "include ") current-year))
54 (if replace-copying-with
55 (let ((case-fold-search t)
56 beg)
57 (goto-char (point-min))
58 ;; Find the beginning of the copyright.
59 (or (search-forward "copyright" nil t)
60 (error "Copyright notice not found!"))
61 ;; Look for a blank line or a line containing only comment chars.
62 (if (re-search-forward "^\\(\\s \\s<\\|\\s>\\)*$" nil t)
63 (forward-line 1)
64 (with-output-to-temp-buffer "*Help*"
65 (princ (substitute-command-keys "\
66I don't know where the copying notice begins.
67Put point there and hit \\[exit-recursive-edit]."))
68 (recursive-edit)))
69 (setq beg (point))
70 (or (search-forward "02139, USA." nil t)
71 (with-output-to-temp-buffer "*Help*"
72 (princ (substitute-command-keys "\
73I don't know where the copying notie ends.
74Put point there and hit \\[exit-recursive-edit]."))
75 (recursive-edit)))
76 (delete-region beg (point))
77 (insert-file replace-copying-with))
78 (if (re-search-forward "; either version \\(.+\\), or (at your option)"
79 nil t)
80 (progn
81 (goto-char (match-beginning 1))
82 (delete-region (point) (match-end 1))
83 (insert current-gpl-version)))))))
84
85(provide 'upd-copyr)