-;;; authors.el --- utility for maintaining Emacs' AUTHORS file -*-coding: iso-2022-7bit;-*-
+;;; authors.el --- utility for maintaining Emacs' AUTHORS file -*-coding: utf-8;-*-
;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
-;; 2006, 2007 Free Software Foundation, Inc.
+;; 2006, 2007, 2008 Free Software Foundation, Inc.
;; Author: Gerd Moellmann <gerd@gnu.org>
;; Maintainer: Kim F. Storm <storm@cua.dk>
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; 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 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;;; Code:
-(defvar authors-coding-system 'iso-2022-7bit
+(defvar authors-coding-system 'utf-8
"Coding system used in the AUTHORS file.")
(defconst authors-many-files 20
("Anna M. Bigatti" "Anna Bigatti")
("Barry A. Warsaw" "Barry A. Warsaw, Century Computing, Inc."
"Barry A. Warsaw, ITB" "Barry Warsaw")
- ("Bj\e,Av\e(Brn Torkelsson" "Bjorn Torkelsson")
+ ("Björn Torkelsson" "Bjorn Torkelsson")
("Brian Fox" "Brian J. Fox")
("Christoph Wedler" "Christoph.Wedler@sap.com")
("Daniel Pfeiffer" "<Daniel.Pfeiffer@Informatik.START.db.de>"
"<Daniel.Pfeiffer@Informatik.START.dbp.de>")
("David Gillespie" "Dave Gillespie")
- ("David K\e,Ae\e(Bgedal" "David K..edal")
+ ("David Kågedal" "David K..edal")
("David M. Koppelman" "David M. Koppelman, Koppel@Ee.Lsu.Edu"
"David Koppelman")
("David M. Smith" "David Smith" "David M Smith")
("Eric S. Raymond" "Eric Raymond")
("Eric Youngdale" "(Eric Youngdale at youngdale@v6550c.nrl.navy.mil)")
("Francis J. Wright" "Dr Francis J. Wright" "Francis Wright")
- ("Fran\e,Ag\e(Bois Pinard" "Francois Pinard")
- ("Francesco Potort\e,Al\e(B" "Francesco Potorti" "Francesco Potorti`")
+ ("François Pinard" "Francois Pinard")
+ ("Francesco Potortì" "Francesco Potorti" "Francesco Potorti`")
("Frederic Pierresteguy" "Fred Pierresteguy")
("Geoff Voelker" "voelker")
- ("Gerd M\e,Av\e(Bllmann" "Gerd Moellmann")
+ ("Gerd Möllmann" "Gerd Moellmann")
("Hallvard B. Furuseth" "Hallvard B Furuseth")
- ("Hrvoje Nik\e$,1!!\e(Bi\e$,1 '\e(B" "Hrvoje Niksic")
+ ("Hrvoje Nikšić" "Hrvoje Niksic")
(nil "(afs@hplb.hpl.hp.com)")
(nil "<Use-Author-Address-Header@\\[127.1\\]>")
(nil "Code Extracted")
(nil "\\`FSF")
(nil "ISO-2022-JP")
("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn")
- ("Jan Dj\e,Ad\e(Brv" "Jan D." "Jan Djarv")
+ ("Jan Djärv" "Jan D." "Jan Djarv")
("Jay K. Adams" "jka@ece.cmu.edu" "Jay Adams")
- ("J\e,Ai\e(Br\e,At\e(Bme Marant" "J\e,Ai\e(Br\e,At\e(Bme Marant" "Jerome Marant")
+ ("Jérôme Marant" "Jérôme Marant" "Jerome Marant")
("Jens-Ulrik Holger Petersen" "Jens-Ulrik Petersen")
("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard")
- ("Johan Bockg\e,Ae\e(Brd" "Johan Bockgard")
+ ("Johan Bockgård" "Johan Bockgard")
("John W. Eaton" "John Eaton")
("Jonathan I. Kamens" "Jonathan Kamens")
("Joseph Arceneaux" "Joe Arceneaux")
- ("Juan Le\e,As\e(Bn Lahoz Garc\e,Am\e(Ba" "Juan-Leon Lahoz Garcia")
+ ("Juan León Lahoz García" "Juan-Leon Lahoz Garcia")
("K. Shane Hartman" "Shane Hartman")
- ("Kai Gro\e,A_\e(Bjohann" "Kai Grossjohann" "Kai Gro\e,A_\e(Bjohann"
+ ("Kai Großjohann" "Kai Grossjohann" "Kai Großjohann"
"Kai.Grossjohann@Cs.Uni-Dortmund.De"
"Kai.Grossjohann@Gmx.Net")
("Karl Berry" "K. Berry")
- ("K\e,Aa\e(Broly L\e$,1 q\e(Brentey" "K\e,Aa\e(Broly L\e$,1 q\e(Brentey" "L\e$,1 q\e(Brentey K\e,Aa\e(Broly")
+ ("Károly Lőrentey" "Károly Lőrentey" "Lőrentey Károly")
("Kazushi Marukawa" "Kazushi")
("Ken Manheimer" "Kenneth Manheimer")
("Kenichi Handa" "Ken'ichi Handa" "Kenichi HANDA")
("Kyle Jones" "Kyle E. Jones")
("Marcus G. Daniels" "Marcus Daniels")
("Mark D. Baushke" "Mark D Baushke")
- ("Agust\e,Am\e(Bn Mart\e,Am\e(Bn" "Agustin Martin")
+ ("Agustín Martín" "Agustin Martin")
("Martin Lorentzon" "Martin Lorentzson")
("Matt Swift" "Matthew Swift")
("Michael R. Mauger" "Michael Mauger")
("Michael D. Ernst" "Michael Ernst")
- ("Micha\e,Ak\e(Bl Cadilhac" "Michael Cadilhac")
+ ("Michaël Cadilhac" "Michael Cadilhac")
("Michael I. Bushnell" "Michael I Bushnell" "Michael I. Bushnell, P/Bsg")
("Mikio Nakajima" "Nakajima Mikio")
("Paul Eggert" "eggert")
("Paul Reilly" "(pmr@legacy.pajato.com)")
- ("Pavel Jan\e,Am\e(Bk" "Pavel Jan\e,Am\e(Bk Ml." "Pavel Jan\e,Am\e(Bk" "Pavel@Janik.Cz")
+ ("Pavel Janík" "Pavel Janík Ml." "Pavel Janík" "Pavel@Janik.Cz")
("Per Abrahamsen" "Per Abhiddenware")
("Peter S. Galbraith" "Peter Galbraith")
("Peter Runestig" "Peter 'luna' Runestig")
("Takaaki Ota" "Tak Ota")
("Takahashi Naoto" "Naoto Takahashi")
("Teodor Zlatanov" "Ted Zlatanov")
- ("Torbj\e,Av\e(Brn Axelsson" "Torbjvrn Axelsson")
- ("Torbj\e,Av\e(Brn Einarsson" "Torbj.*rn Einarsson")
+ ("Torbjörn Axelsson" "Torbjvrn Axelsson")
+ ("Torbjörn Einarsson" "Torbj.*rn Einarsson")
("Toru Tomabechi" "Toru Tomabechi,")
("Vincent Del Vecchio" "Vince Del Vecchio")
("William M. Perry" "Bill Perry")
matches one of the REGEXPs, use REALNAME instead.
If REALNAME is nil, ignore that author.")
+(defconst authors-fixed-case
+ '("Bryan O'Sullivan"
+ "Christian von Roques"
+ "Craig McDaniel"
+ "David J. MacKenzie"
+ "David McCabe"
+ "David O'Toole"
+ "Dominique de Waleffe"
+ "Edward O'Connor"
+ "Exal de Jesus Garcia Carrillo"
+ "Greg McGary"
+ "Hans de Graaff"
+ "James TD Smith"
+ "Michael McNamara"
+ "Mike McEwan"
+ "Peter von der Ahe"
+ "Peter O'Gorman"
+ "Roland McGrath"
+ "Sean O'Rourke")
+ "List of authors whose names cannot be simply capitalized.")
(defvar authors-public-domain-files
- '("auto-show\\.el"
- "form-d2\\.el"
- "emerge\\.el"
- "unused\\.el"
+ '("emerge\\.el"
"vi\\.el"
"feedmail\\.el"
"mailpost\\.el"
"hanoi\\.el"
"meese\\.el"
"studly\\.el"
- "modula2\\.el")
+ "modula2\\.el"
+ "nnmaildir\\.el"
+ "nnil\\.el"
+ "b2m\\.c"
+ "unexhp9k800\\.c"
+ "emacsclient\\.1"
+ "check-doc-strings")
"List of regexps matching files for which the FSF doesn't need papers.")
'("external-lisp"
"lock" "share-lib" "local-lisp"
"noleim-Makefile.in"
- "NEWS" "PROBLEMS" "FAQ" "AUTHORS" "FOR-RELEASE" "TODO")
+ "NEWS" "ORDERS" "PROBLEMS" "FAQ" "AUTHORS" "FOR-RELEASE" "TODO" "todo"
+ "MACHINES" "SERVICE"
+ "README.unicode" "README.multi-tty" "TUTORIAL.translators"
+ "NEWS.unicode" "COPYING.DJ" "Makefile.old" "Makefile.am"
+ "NEWS.1" "OOOOONEWS...OONEWS" "OOOONEWS" "etc/NEWS"
+ "NEWS.1-17" "NEWS.18" "NEWS.19" "NEWS.20" "NEWS.21" "NEWS.22"
+ "install-sh" "missing" "mkinstalldirs"
+ "termcap.dat" "termcap.src" "termcap.ucb" "termcap"
+ "ChangeLog.nextstep" "Emacs.clr" "spec.txt"
+ "gfdl.1"
+ "texi/Makefile.in"
+ "Imakefile" "icons/sink.ico" "aixcc.lex"
+ "nxml/char-name/unicode"
+ ;; Never had any meaningful changes logged, now deleted:
+ "split-man" "Xkeymap.txt" "ms-7bkermit" "ulimit.hack"
+ "gnu-hp300" "refcard.bit" "ledit.l" "forms.README"
+ "CXTERM-DIC/PY.tit" "CXTERM-DIC/ZIRANMA.tit"
+ "CXTERM-DIC/CTLau.tit" "CXTERM-DIC/CTLauB.tit"
+ "NICKLES.WORTH" "INTERVAL.IDEAS" "RCP"
+ "3B-MAXMEM" "AIX.DUMP" "SUN-SUPPORT" "XENIX"
+ "CODINGS" "CHARSETS"
+ "calc/INSTALL" "calc/Makefile"
+ "vms-pp.trans" "_emacs" "batcomp.com"
+ ;; MH-E stuff not in Emacs:
+ "import-emacs" "release-utils"
+ ;; Erc stuff not in Emacs:
+ "ChangeLog.2001" "ChangeLog.2002" "ChangeLog.2003" "ChangeLog.2004"
+ "ChangeLog.2005"
+ "README.extras" "dir-template" "mkChangeLog" "MkChangeLog" "erc-auto.in"
+ "CREDITS" "HACKING"
+ "debian/changelog"
+ "debian/control"
+ "debian/copyright"
+ "debian/maint/conffiles"
+ "debian/maint/conffiles.in"
+ "debian/maint/postinst"
+ "debian/maint/postinst.in"
+ "debian/maint/prerm"
+ "debian/maint/prerm.in"
+ "debian/README.Debian"
+ "debian/README.erc-speak"
+ "debian/rules"
+ "debian/scripts/install"
+ "debian/scripts/install.in"
+ "debian/scripts/remove"
+ "debian/scripts/remove.in"
+ "debian/scripts/startup"
+ "debian/scripts/startup.erc"
+ "debian/scripts/startup.erc-speak"
+ )
"List of files and directories to ignore.
Changes to files in this list are not listed.")
("Geoff Voelker" :wrote "src/makefile.nt" "lisp/makefile.nt" "winnt.el"
"nt.c" "nt.h" "ntheap.c" "ntheap.h" "ntinevt.c"
"ntproc.c" "ntterm.c" "windowsnt.h")
- ("Morten Welinder" :wrote "dosfns.c" "[many MSDOS files]" "msdos.h")
+ ("Morten Welinder" :wrote "dosfns.c" "[many MS-DOS files]" "msdos.h")
("Pace Willisson" :wrote "ispell.el")
("Garrett Wollman" :changed "sendmail.el")
("Dale R. Worley" :changed "mail-extr.el")
(defconst authors-valid-file-names
'("aclocal.m4"
+ "build-ins.in"
+ "Makefile.noleim"
"makedist.bat"
- "make-delta")
- "File names which are valid, but no longer exists (or cannot be
+ "makefile.def"
+ "makefile.nt"
+ "debug.bat.in" "emacs.bat.in"
+ ".gdbinit-union"
+ "alloca.s"
+ "make-delta"
+ "config.w95"
+ "emacstool.1"
+ "align.umax"
+ "cxux-crt0.s"
+ "gould-sigvec.s"
+ "getdate.y"
+ "ymakefile"
+ "permute-index" "index.perm"
+ "emacs21.ico"
+ "LPF" "LEDIT" "OTHER.EMACSES"
+ "emacs16_mac.png" "emacs24_mac.png"
+ "emacs256_mac.png" "emacs32_mac.png"
+ "emacs48_mac.png" "emacs512_mac.png"
+ ;; Deleted vms stuff:
+ "temacs.opt" "descrip.mms" "compile.com" "link.com"
+ )
+ "File names which are valid, but no longer exist (or cannot be
found) in the repository.")
(defconst authors-renamed-files-alist
("unexnt.c" . "unexw32.c")
("s/windowsnt.h" . "s/ms-w32.h")
("config.emacs" . "configure")
+ ("config.h.dist" . "config.h.in")
+ ("config.h-dist" . "config.h.in")
+ ("paths.h-dist" . "paths.h.in")
+ ("patch1" . "sed1.inp")
("GETTING.GNU.SOFTWARE" . "FTP")
+ ("etc/MACHINES" . "MACHINES")
+ ("ONEWS" . "NEWS.19")
+ ("ONEWS.1" . "NEWS.1-17")
+ ("ONEWS.2" . "NEWS.1-17")
+ ("ONEWS.3" . "NEWS.18")
+ ("ONEWS.4" . "NEWS.18")
+ ("ORDERS.USA" . "ORDERS")
+ ("EUROPE" . "ORDERS")
+ ("DIFF" . "OTHER.EMACSES")
+ ("CCADIFF" . "OTHER.EMACSES")
+ ("GOSDIFF" . "OTHER.EMACSES")
+ ("Makefile.in.in" . "Makefile.in")
("leim-Makefile" . "leim/Makefile")
("leim-Makefile.in" . "leim/Makefile.in")
("emacs-lisp/testcover-ses.el" . "tcover-ses.el")
("emacs-lisp/testcover-unsafep.el" . "tcover-unsafep.el")
("INSTALL-CVS" . "INSTALL.CVS")
+ ("refcards/fr-drdref.pdf" . "refcards/fr-dired-ref.pdf")
+ ("gnus-logo.eps" . "refcards/gnus-logo.eps")
+ ("build-install" . "build-ins.in")
+ ("build-install.in" . "build-ins.in")
+ ("unidata/Makefile" . "unidata/Makefile.in")
+ ;; Not renamed, but we only have the latter in the Emacs repo.
+ ("trampver.texi.in" . "trampver.texi")
+ ("e/eterm" . "e/eterm-color")
+ ("e/eterm.ti" . "e/eterm-color.ti")
+ ("README.txt" . "README")
+ ("emacs.names" . "JOKES")
+ ("ED.WORSHIP" . "JOKES")
+ ("GNU.JOKES" . "JOKES")
+ ("CHARACTERS" . "TODO")
+ ("schema/xhtml-basic-form.rnc" . "schema/xhtml-bform.rnc" )
+ ("schema/xhtml-basic-table.rnc" . "schema/xhtml-btable.rnc")
+ ("schema/xhtml-list.rnc" . "schema/xhtml-lst.rnc")
+ ("schema/xhtml-target.rnc" . "schema/xhtml-tgt.rnc")
+ ("schema/xhtml-style.rnc" . "schema/xhtml-xstyle.rnc")
+ ("schema/docbook-dyntbl.rnc" . "schema/docbk-dyntbl.rnc")
+ ("schema/docbook-soextbl.rnc" . "schema/docbk-soextbl.rn" )
+ ("texi/url.txi" . "url.texi")
+ ;; Moved to different directories.
+ ("ctags.1" . "ctags.1")
+ ("etags.1" . "etags.1")
+ ("emacs.1" . "emacs.1")
+ ("emacsclient.1" . "emacsclient.1")
+ ("icons/emacs21.ico" . "emacs21.ico")
)
"Alist of files which have been renamed during their lifetime.
Elements are (OLDNAME . NEWNAME).")
("\\.[xp]bm$" . t)
("^paths\\." . t)
("^install\\." . t)
+ ("^\\(TUTORIAL[^/]*\\)" . "tutorials/\\1")
+ ("^\\(tree-widget/\\(?:default\\|folder\\)/[-a-z]+\\.png\\)$" .
+ "images/\\1")
+ ("^\\(images/icons/\\)mac\\(emacs\\)_\\([0-9]+\\)\\(\\.png\\)" .
+ "\\1\\2\\3_mac\\4")
+ ("\\(images/icons/\\)emacs_\\([0-9][0-9]\\)\\.png" .
+ "\\1hicolor/\\2x\\2/apps/emacs.png")
)
"List regexps and rewriting rules for renamed files.
Elements are (REGEXP . REPLACE). If REPLACE is a string, the file
(let ((entry (assoc file authors-checked-files-alist))
relname
valid)
+ ;; FIXME this is bogus. FILE should be re-checked in every
+ ;; different directory associated with LOG-FILE.
+ ;; Eg if src/ChangeLog refers to configure.in, and you happen to
+ ;; scan src/ before top-level/, the configure.in entries in
+ ;; top-level/ get ignored, because this mistakenly thinks
+ ;; top-level/configure.in does not exist.
(if entry
(cdr entry)
(setq relname (file-name-nondirectory file))
(setq authors-checked-files-alist
(cons (cons file valid) authors-checked-files-alist))
(unless (or valid
+ (member file authors-ignored-files)
(string-match "[*]" file)
(string-match "^[0-9.]+$" file))
(setq authors-invalid-file-names
(defun authors-canonical-author-name (author)
"Return a canonicalized form of AUTHOR, an author name.
-If AUTHOR has an alias, use that. Remove email addresses. Capitalize
-words in the author's name."
+If AUTHOR has an entry in `authors-aliases', use that. Remove
+email addresses. Capitalize words in the author's name, unless
+it is found in `authors-fixed-case'."
(let* ((aliases authors-aliases)
regexps realname)
(while aliases
(setq author (replace-regexp-in-string "[ \t]+" " " author))
(unless (string-match "[-, \t]" author)
(setq author ""))
- (capitalize author)))
+ (or (car (member author authors-fixed-case))
+ (capitalize author))))
(defun authors-scan-change-log (log-file table)
"Scan change log LOG-FILE for author information.
;; Some entries contain a year range in front of the
;; author's name.
(skip-chars-forward "-0-9 \t")
+ ;; FIXME handle multiline authors, comma-separated.
(let ((author (buffer-substring-no-properties
(point) (line-end-position))))
(setq author (authors-canonical-author-name author))
buffer *Authors Errors* containing references to unknown files."
(interactive "DEmacs source directory: ")
(setq root (expand-file-name root))
- (let ((logs (process-lines "find" root "-name" "ChangeLog*"))
+ (let ((logs (process-lines find-program root "-name" "ChangeLog*"))
(table (make-hash-table :test 'equal))
(buffer-name "*Authors*")
authors-checked-files-alist
(when (string-match "ChangeLog\\(.[0-9]+\\)?$" log)
(message "Scanning %s..." log)
(authors-scan-change-log log table)))
- (let ((els (process-lines "find" root "-name" "*.el")))
+ (let ((els (process-lines find-program root "-name" "*.el")))
(dolist (file els)
(message "Scanning %s..." file)
(authors-scan-el file table)))
(unless noninteractive
(when authors-invalid-file-names
(with-current-buffer (get-buffer-create "*Authors Errors*")
+ (setq buffer-read-only nil)
(erase-buffer)
(set-buffer-file-coding-system authors-coding-system)
(insert "Unrecognized file entries found:\n\n")
(provide 'authors)
-;;; arch-tag: 659d5900-5ff2-43b0-954c-a315cc1e4dc1
+;; arch-tag: 659d5900-5ff2-43b0-954c-a315cc1e4dc1
;;; authors.el ends here