1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-02-06 20:49:33 +00:00

(copyright-update-year): New function extracted from copyright-update.

When `arg' is set, replace the year, not the `copyright' text.
Ignore `copyright-update = nil' if called interactively.
Use "," rather than ", " if that's what was used before.
Recognize mixes of 2 and 4 digit years.
Use replace-match.
(copyright-update): Add interactivep arg.  Use it instead of use last-command.
Use replace-match.  Don't assume (point-min) == 1.
This commit is contained in:
Stefan Monnier 2003-06-14 20:11:37 +00:00
parent effe34908c
commit f47f530244
2 changed files with 88 additions and 53 deletions

View File

@ -1,5 +1,16 @@
2003-06-14 Stefan Monnier <monnier@cs.yale.edu>
* emacs-lisp/copyright.el (copyright-update-year): New function
extracted from copyright-update.
When `arg' is set, replace the year, not the `copyright' text.
Ignore `copyright-update = nil' if called interactively.
Use "," rather than ", " if that's what was used before.
Recognize mixes of 2 and 4 digit years.
Use replace-match.
(copyright-update): Add interactivep arg.
Use it instead of use last-command.
Use replace-match. Don't assume (point-min) == 1.
* textmodes/tex-mode.el (tex-compile-commands):
Handle tex-start-commands like tex-start-tex does.

View File

@ -1,6 +1,7 @@
;;; copyright.el --- update the copyright notice in current buffer
;; Copyright (C) 1991, 92, 93, 94, 95, 98, 2001 Free Software Foundation, Inc.
;; Copyright (C) 1991, 92, 93, 94, 95, 1998, 2001, 2003
;; Free Software Foundation, Inc.
;; Author: Daniel Pfeiffer <occitan@esperanto.org>
;; Keywords: maint, tools
@ -25,7 +26,8 @@
;;; Commentary:
;; Allows updating the copyright year and above mentioned GPL version manually
;; or when saving a file. Do (add-hook 'write-file-hooks 'copyright-update).
;; or when saving a file.
;; Do (add-hook 'write-file-functions 'copyright-update).
;;; Code:
@ -75,53 +77,82 @@ When this is `function', only ask when called non-interactively."
(defvar copyright-current-year (substring (current-time-string) -4)
"String representing the current year.")
(defun copyright-update-year (replace noquery)
(when (re-search-forward copyright-regexp (+ (point) copyright-limit) t)
;; Note that `current-time-string' isn't locale-sensitive.
(setq copyright-current-year (substring (current-time-string) -4))
(unless (string= (buffer-substring (- (match-end 2) 2) (match-end 2))
(substring copyright-current-year -2))
(if (or noquery
(y-or-n-p (if replace
(concat "Replace copyright year(s) by "
copyright-current-year "? ")
(concat "Add " copyright-current-year
" to copyright? "))))
(if replace
(replace-match copyright-current-year t t nil 1)
(let ((size (save-excursion (skip-chars-backward "0-9"))))
(if (and (eq (% (- (string-to-number copyright-current-year)
(string-to-number (buffer-substring
(+ (point) size)
(point))))
100)
1)
(or (eq (char-after (+ (point) size -1)) ?-)
(eq (char-after (+ (point) size -2)) ?-)))
;; This is a range so just replace the end part.
(delete-char size)
;; Detect if this is using the following shorthand:
;; (C) 1993, 94, 95, 1998, 2000, 01, 02, 2003
(if (and
;; Check that the last year was 4-chars and same century.
(eq size -4)
(equal (buffer-substring (- (point) 4) (- (point) 2))
(substring copyright-current-year 0 2))
;; Check that there are 2-char years as well.
(save-excursion
(re-search-backward "[^0-9][0-9][0-9][^0-9]"
(line-beginning-position) t))
;; Make sure we don't remove the first century marker.
(save-excursion
(forward-char size)
(re-search-backward
(concat (buffer-substring (point) (+ (point) 2))
"[0-9][0-9]")
(line-beginning-position) t)))
;; Remove the century marker of the last entry.
(delete-region (- (point) 4) (- (point) 2)))
;; Insert a comma with the preferred number of spaces.
(insert
(save-excursion
(if (re-search-backward "[0-9]\\( *, *\\)[0-9]"
(line-beginning-position) t)
(match-string 1)
", ")))
;; If people use the '91 '92 '93 scheme, do that as well.
(if (eq (char-after (+ (point) size -3)) ?')
(insert ?')))
;; Finally insert the new year.
(insert (substring copyright-current-year size))))))))
;;;###autoload
(defun copyright-update (&optional arg)
(defun copyright-update (&optional arg interactivep)
"Update copyright notice at beginning of buffer to indicate the current year.
With prefix ARG, replace the years in the notice rather than adding
the current year after them. If necessary, and
`copyright-current-gpl-version' is set, any copying permissions
following the copyright are updated as well."
(interactive "*P")
(if copyright-update
following the copyright are updated as well.
If non-nil, INTERACTIVEP tells the function to behave as when it's called
interactively."
(interactive "*P\nd")
(when (or copyright-update interactivep)
(let ((noquery (or (not copyright-query)
(and (eq copyright-query 'function) interactivep))))
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
;; Note that `current-time-string' isn't locale-sensitive.
(setq copyright-current-year (substring (current-time-string) -4))
(if (re-search-forward copyright-regexp copyright-limit t)
(if (string= (buffer-substring (- (match-end 2) 2) (match-end 2))
(substring copyright-current-year -2))
()
(if (or (not copyright-query)
(and (eq copyright-query 'function)
(eq this-command 'copyright-update))
(y-or-n-p (if arg
(concat "Replace copyright year(s) by "
copyright-current-year "? ")
(concat "Add " copyright-current-year
" to copyright? "))))
(if arg
(progn
(delete-region (match-beginning 1) (match-end 1))
(insert copyright-current-year))
(setq arg (save-excursion (skip-chars-backward "0-9")))
(if (and (eq (% (- (string-to-number
copyright-current-year)
(string-to-number (buffer-substring
(+ (point) arg)
(point))))
100)
1)
(or (eq (char-after (+ (point) arg -1)) ?-)
(eq (char-after (+ (point) arg -2)) ?-)))
(delete-char arg)
(insert ", ")
(if (eq (char-after (+ (point) arg -3)) ?')
(insert ?')))
(insert (substring copyright-current-year arg))))))
(copyright-update-year arg noquery)
(goto-char (point-min))
(and copyright-current-gpl-version
;; match the GPL version comment in .el files, including the
@ -129,26 +160,19 @@ following the copyright are updated as well."
(re-search-forward "\\(the Free Software Foundation;\
either \\|; a\\^u eldono \\([0-9]+\\)a, ? a\\^u (la\\^u via \\)\
version \\([0-9]+\\), or (at"
copyright-limit t)
(+ (point) copyright-limit) t)
(not (string= (match-string 3) copyright-current-gpl-version))
(or (not copyright-query)
(and (eq copyright-query 'function)
(eq this-command 'copyright-update))
(or noquery
(y-or-n-p (concat "Replace GPL version by "
copyright-current-gpl-version "? ")))
(progn
(if (match-end 2)
;; Esperanto bilingual comment in two-column.el
(progn
(delete-region (match-beginning 2) (match-end 2))
(goto-char (match-beginning 2))
(insert copyright-current-gpl-version)))
(delete-region (match-beginning 3) (match-end 3))
(goto-char (match-beginning 3))
(insert copyright-current-gpl-version))))
(replace-match copyright-current-gpl-version t t nil 2))
(replace-match copyright-current-gpl-version t t nil 3))))
(set (make-local-variable 'copyright-update) nil)))
;; If a write-file-hook returns non-nil, the file is presumed to be written.
nil)
;; If a write-file-hook returns non-nil, the file is presumed to be written.
nil))
;;;###autoload
@ -159,7 +183,7 @@ version \\([0-9]+\\), or (at"
"Copyright (C) " `(substring (current-time-string) -4) " by "
(or (getenv "ORGANIZATION")
str)
'(if (> (point) copyright-limit)
'(if (> (point) (+ (point-min) copyright-limit))
(message "Copyright extends beyond `copyright-limit' and won't be updated automatically."))
comment-end \n)