From: Stefan Monnier Date: Sat, 14 Jun 2003 20:11:37 +0000 (+0000) Subject: (copyright-update-year): New function extracted from copyright-update. X-Git-Tag: ttn-vms-21-2-B4~9656 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f47f53024467c5af8d85e3023ce8da609a4aee8d;p=emacs.git (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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 33c62e493f5..687a0e326a8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,16 @@ 2003-06-14 Stefan Monnier + * 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. diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el index abed05cf902..c2ad007e3a8 100644 --- a/lisp/emacs-lisp/copyright.el +++ b/lisp/emacs-lisp/copyright.el @@ -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 ;; 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)