aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorMichael R. Mauger2017-07-03 15:32:41 -0400
committerMichael R. Mauger2017-07-03 15:32:41 -0400
commit776635c01abd4aa759e7aa9584b513146978568c (patch)
tree554f444bc96cb6b05435e8bf195de4df1b00df8f /admin
parent77083e2d34ba5559ae2899d3b03cf08c2e6c5ad4 (diff)
parent4cd0db3d6e6e4d5bd49283483bdafbbfc0f583f1 (diff)
downloademacs-776635c01abd4aa759e7aa9584b513146978568c.tar.gz
emacs-776635c01abd4aa759e7aa9584b513146978568c.zip
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
Diffstat (limited to 'admin')
-rw-r--r--admin/admin.el9
-rw-r--r--admin/authors.el127
-rwxr-xr-xadmin/merge-gnulib12
-rw-r--r--admin/notes/repo7
-rw-r--r--admin/unidata/Makefile.in45
-rw-r--r--admin/unidata/README4
-rw-r--r--admin/unidata/SpecialCasing.txt281
-rw-r--r--admin/unidata/unidata-gen.el603
-rwxr-xr-xadmin/update_autogen22
9 files changed, 775 insertions, 335 deletions
diff --git a/admin/admin.el b/admin/admin.el
index 5428e3a10bc..e81e7f1e7e1 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -655,7 +655,10 @@ style=\"text-align:left\">")
655 ("@GZIP_PROG@" . "gzip") 655 ("@GZIP_PROG@" . "gzip")
656 ("@INSTALL@" . "install -c") 656 ("@INSTALL@" . "install -c")
657 ("@INSTALL_DATA@" . "${INSTALL} -m 644") 657 ("@INSTALL_DATA@" . "${INSTALL} -m 644")
658 ("@configure_input@" . "")) 658 ("@configure_input@" . "")
659 ("@AM_DEFAULT_VERBOSITY@" . "0")
660 ("@AM_V@" . "${V}")
661 ("@AM_DEFAULT_V@" . "${AM_DEFAULT_VERBOSITY}"))
659 "Alist of (REGEXP . REPLACEMENT) pairs for `make-manuals-dist'.") 662 "Alist of (REGEXP . REPLACEMENT) pairs for `make-manuals-dist'.")
660 663
661(defun make-manuals-dist--1 (root type) 664(defun make-manuals-dist--1 (root type)
@@ -675,7 +678,9 @@ style=\"text-align:left\">")
675 (delete-directory stem t)) 678 (delete-directory stem t))
676 (make-directory stem) 679 (make-directory stem)
677 (copy-file "../doc/misc/texinfo.tex" stem) 680 (copy-file "../doc/misc/texinfo.tex" stem)
678 (or (equal type "emacs") (copy-file "../doc/emacs/emacsver.texi" stem)) 681 (unless (equal type "emacs")
682 (copy-file "../doc/emacs/emacsver.texi" stem)
683 (copy-file "../doc/emacs/docstyle.texi" stem))
679 (dolist (file (directory-files (format "../doc/%s" type) t)) 684 (dolist (file (directory-files (format "../doc/%s" type) t))
680 (if (or (string-match-p "\\(\\.texi\\'\\|/README\\'\\)" file) 685 (if (or (string-match-p "\\(\\.texi\\'\\|/README\\'\\)" file)
681 (and (equal type "lispintro") 686 (and (equal type "lispintro")
diff --git a/admin/authors.el b/admin/authors.el
index d8f56fd9258..86d42be8dc6 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -3,7 +3,7 @@
3;; Copyright (C) 2000-2017 Free Software Foundation, Inc. 3;; Copyright (C) 2000-2017 Free Software Foundation, Inc.
4 4
5;; Author: Gerd Moellmann <gerd@gnu.org> 5;; Author: Gerd Moellmann <gerd@gnu.org>
6;; Maintainer: Kim F. Storm <storm@cua.dk> 6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: maint 7;; Keywords: maint
8;; Package: emacs 8;; Package: emacs
9 9
@@ -27,9 +27,6 @@
27;; Use M-x authors RET to create an *Authors* buffer that can used as 27;; Use M-x authors RET to create an *Authors* buffer that can used as
28;; or merged with Emacs's AUTHORS file. 28;; or merged with Emacs's AUTHORS file.
29 29
30;; FIXME: This needs to modernized in the light of current practice,
31;; which generates a single top-level ChangeLog file from commit logs.
32
33;;; Code: 30;;; Code:
34 31
35(defvar authors-coding-system 'utf-8 32(defvar authors-coding-system 'utf-8
@@ -81,6 +78,7 @@ files.")
81 ("François Pinard" "Francois Pinard") 78 ("François Pinard" "Francois Pinard")
82 ("Francesco Potortì" "Francesco Potorti" "Francesco Potorti`") 79 ("Francesco Potortì" "Francesco Potorti" "Francesco Potorti`")
83 ("Frederic Pierresteguy" "Fred Pierresteguy") 80 ("Frederic Pierresteguy" "Fred Pierresteguy")
81 (nil "^FSF")
84 ("Gerd Möllmann" "Gerd Moellmann") 82 ("Gerd Möllmann" "Gerd Moellmann")
85 ("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth") 83 ("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth")
86 ("Hrvoje Nikšić" "Hrvoje Niksic") 84 ("Hrvoje Nikšić" "Hrvoje Niksic")
@@ -141,6 +139,7 @@ files.")
141 ("Peter J. Weisberg" "PJ Weisberg") 139 ("Peter J. Weisberg" "PJ Weisberg")
142 ("Peter S. Galbraith" "Peter S Galbraith" "Peter Galbraith") 140 ("Peter S. Galbraith" "Peter S Galbraith" "Peter Galbraith")
143 ("Peter Runestig" "Peter 'luna' Runestig") 141 ("Peter Runestig" "Peter 'luna' Runestig")
142 ("Philipp Stephani" "Philipp .*phst@google")
144 ("Piotr Zieliński" "Piotr Zielinski") 143 ("Piotr Zieliński" "Piotr Zielinski")
145 ("Przemysław Wojnowski" "Przemyslaw Wojnowski") 144 ("Przemysław Wojnowski" "Przemyslaw Wojnowski")
146 ("Rainer Schöpf" "Rainer Schoepf") 145 ("Rainer Schöpf" "Rainer Schoepf")
@@ -154,6 +153,7 @@ files.")
154 ("Roland B. Roberts" "Roland B Roberts" "Roland Roberts") 153 ("Roland B. Roberts" "Roland B Roberts" "Roland Roberts")
155 ("Ron Schnell" "Ronnie Schnell") 154 ("Ron Schnell" "Ronnie Schnell")
156 ("Rui-Tao Dong" "Rui-Tao Dong ~{6-HpLN~}") 155 ("Rui-Tao Dong" "Rui-Tao Dong ~{6-HpLN~}")
156 ("Ryan Thompson" "Ryan .*rct@thompsonclan")
157 ("Sacha Chua" "Sandra Jean Chua") 157 ("Sacha Chua" "Sandra Jean Chua")
158 ("Sam Steingold" "Sam Shteingold") 158 ("Sam Steingold" "Sam Shteingold")
159 ("Satyaki Das" "Indexed search by Satyaki Das") 159 ("Satyaki Das" "Indexed search by Satyaki Das")
@@ -170,6 +170,7 @@ files.")
170 ("Takaaki Ota" "Tak Ota") 170 ("Takaaki Ota" "Tak Ota")
171 ("Takahashi Naoto" "Naoto Takahashi") 171 ("Takahashi Naoto" "Naoto Takahashi")
172 ("Teodor Zlatanov" "Ted Zlatanov") 172 ("Teodor Zlatanov" "Ted Zlatanov")
173 (nil "The PCL-CVS Trust")
173 ("Thomas Dye" "Tom Dye") 174 ("Thomas Dye" "Tom Dye")
174 ("Thomas Horsley" "Tom Horsley") ; FIXME ? 175 ("Thomas Horsley" "Tom Horsley") ; FIXME ?
175 ("Thomas Wurgler" "Tom Wurgler") 176 ("Thomas Wurgler" "Tom Wurgler")
@@ -209,7 +210,7 @@ If REALNAME is nil, ignore that author.")
209 "David O'Toole" 210 "David O'Toole"
210 "Devon Sean McCullough" 211 "Devon Sean McCullough"
211 "Dominique de Waleffe" 212 "Dominique de Waleffe"
212 "Edward O'Connor" 213 "Theresa O'Connor"
213 "Exal de Jesus Garcia Carrillo" 214 "Exal de Jesus Garcia Carrillo"
214 "George McNinch" 215 "George McNinch"
215 "Greg McGary" 216 "Greg McGary"
@@ -261,7 +262,13 @@ If REALNAME is nil, ignore that author.")
261 "\\.\\(bzr\\|cvs\\|git\\)ignore$" ; obsolete or uninteresting 262 "\\.\\(bzr\\|cvs\\|git\\)ignore$" ; obsolete or uninteresting
262 "\\.arch-inventory$" 263 "\\.arch-inventory$"
263 "ChangeLog\\(\\.[0-9]+\\)?\\'" 264 "ChangeLog\\(\\.[0-9]+\\)?\\'"
264 "automated/data/" ; not interesting 265 "\\(automated\\|test\\)/data/" ; not interesting
266 "cedet/tests/"
267 "test/etags/"
268 "\\`\\(indent\\|automated\\)\\'" "indent/" "mod-test/"
269 "-resources/"
270 "unidata/.*\\.txt\\'"
271 "BidiCharacterTest.txt"
265 ;; TODO lib/? Matches other things? 272 ;; TODO lib/? Matches other things?
266 "build-aux/" "m4/" "Emacs.xcodeproj" "mapfiles" "\\.map\\'" 273 "build-aux/" "m4/" "Emacs.xcodeproj" "mapfiles" "\\.map\\'"
267 "preferences\\.\\(nib\\|gorm\\)" 274 "preferences\\.\\(nib\\|gorm\\)"
@@ -273,7 +280,8 @@ Changes to files matching one of the regexps in this list are not listed.")
273 280
274(defconst authors-no-scan-regexps 281(defconst authors-no-scan-regexps
275 '("etc/nxml/" 282 '("etc/nxml/"
276 "automated/data/") 283 "test/data/"
284 "test/.*-resources/")
277 "Lists of regexps matching files not to scan for authorship.") 285 "Lists of regexps matching files not to scan for authorship.")
278 286
279(defconst authors-ignored-files 287(defconst authors-ignored-files
@@ -315,6 +323,7 @@ Changes to files matching one of the regexps in this list are not listed.")
315 "*.el" 323 "*.el"
316 ;; Autogen: 324 ;; Autogen:
317 "cus-load.el" "finder-inf.el" "ldefs-boot.el" "loaddefs-boot.el" 325 "cus-load.el" "finder-inf.el" "ldefs-boot.el" "loaddefs-boot.el"
326 "lisp/ldefs-boot-manual.el" "lisp/ldefs-boot-auto.el"
318 "compile" "config.guess" "config.sub" "depcomp" 327 "compile" "config.guess" "config.sub" "depcomp"
319 "autogen/compile" "autogen/config.guess" "autogen/config.in" 328 "autogen/compile" "autogen/config.guess" "autogen/config.in"
320 "autogen/config.sub" "autogen/depcomp" "autogen/install-sh" 329 "autogen/config.sub" "autogen/depcomp" "autogen/install-sh"
@@ -384,10 +393,12 @@ Changes to files matching one of the regexps in this list are not listed.")
384 ;; Not in gnulib anymore 393 ;; Not in gnulib anymore
385 "lib/qset-acl.c" "lib/qcopy-acl.c" "lib/file-has-acl.c" 394 "lib/qset-acl.c" "lib/qcopy-acl.c" "lib/file-has-acl.c"
386 ;; files from old MS Windows build procedures 395 ;; files from old MS Windows build procedures
396 "nt/gnulib-modules-to-delete.cfg"
387 "makefile.w32-in" 397 "makefile.w32-in"
388 "admin/unidata/makefile.w32-in" 398 "admin/unidata/makefile.w32-in"
389 "unidata/makefile.w32-in" 399 "unidata/makefile.w32-in"
390 "lib/makefile.w32-in" 400 "lib/makefile.w32-in"
401 "lib-src/makefile.w32-in"
391 "leim/makefile.w32-in" 402 "leim/makefile.w32-in"
392 "lisp/makefile.w32-in" 403 "lisp/makefile.w32-in"
393 "src/makefile.w32-in" 404 "src/makefile.w32-in"
@@ -401,12 +412,13 @@ Changes to files matching one of the regexps in this list are not listed.")
401 "src/paths.h" 412 "src/paths.h"
402 "envadd.bat" 413 "envadd.bat"
403 "multi-install-info.bat" 414 "multi-install-info.bat"
404 "INSTALL.OLD" 415 "INSTALL.OLD" "nt/INSTALL.OLD"
405 "nt/src/paths.h" 416 "nt/src/paths.h"
406 "nmake.defs" 417 "nmake.defs"
407 "gmake.defs" 418 "gmake.defs"
408 "zipdist.bat" 419 "zipdist.bat"
409 "nt/makefile.w32-in" 420 "nt/makefile.w32-in"
421 "nt/subdirs.el"
410 "config.nt" 422 "config.nt"
411 "nextstep/WISHLIST" 423 "nextstep/WISHLIST"
412 ) 424 )
@@ -652,9 +664,11 @@ Changes to files in this list are not listed.")
652 "configure" "config.h" 664 "configure" "config.h"
653 "is_exec.c" "sigaction.c" 665 "is_exec.c" "sigaction.c"
654 ;; nt/ 666 ;; nt/
655 "ebuild.bat" "install.bat" "fast-install.bat" 667 "config.nt" "gmake.defs" "gnulib.mk" "nmake.defs"
668 "ebuild.bat" "envadd.bat" "fast-install.bat" "install.bat"
669 "multi-install-info.bat" "zipdist.bat"
656 "debug.bat.in" "emacs.bat.in" "addsection.c" 670 "debug.bat.in" "emacs.bat.in" "addsection.c"
657 "inc/sys/dir.h" "inc/gettext.h" 671 "inc/sys/dir.h" "inc/gettext.h" "nt/inc/socket.h"
658 "time.h" 672 "time.h"
659 ".gdbinit-union" 673 ".gdbinit-union"
660 "alloca.s" 674 "alloca.s"
@@ -693,6 +707,7 @@ Changes to files in this list are not listed.")
693 "images/gnus/reverse-smile.xpm" 707 "images/gnus/reverse-smile.xpm"
694 "notes/commits" "notes/changelogs" 708 "notes/commits" "notes/changelogs"
695 "revdiff" ; admin/ 709 "revdiff" ; admin/
710 "admin/ldefs-clean.el"
696 "vcdiff" "rcs-checkin" "tindex.pl" 711 "vcdiff" "rcs-checkin" "tindex.pl"
697 "mainmake" "sed1.inp" "sed2.inp" "sed3.inp" ; msdos/ 712 "mainmake" "sed1.inp" "sed2.inp" "sed3.inp" ; msdos/
698 "mac-fix-env.m" 713 "mac-fix-env.m"
@@ -733,7 +748,10 @@ Changes to files in this list are not listed.")
733 "dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el" 748 "dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el"
734 "gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el" 749 "gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el"
735 "eww.el" "shr-color.el" "shr.el" "earcon.el" "gnus-audio.el" "encrypt.el" 750 "eww.el" "shr-color.el" "shr.el" "earcon.el" "gnus-audio.el" "encrypt.el"
736 "format-spec.el" "gnus-move.el" 751 "format-spec.el" "gnus-move.el" "gnus-sync.el"
752 "auth-source.el" "ecomplete.el" "gravatar.el" "mailcap.el" "plstore.el"
753 "pop3.el" "qp.el" "registry.el" "rfc2231.el" "rtree.el"
754 "sieve.el" "sieve-mode.el"
737 ;; doc 755 ;; doc
738 "getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi" 756 "getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi"
739 "back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el" 757 "back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el"
@@ -747,7 +765,11 @@ Changes to files in this list are not listed.")
747 ;; lib/ 765 ;; lib/
748 "lib/stdio.c" "lib/gl_openssl.h" "lib/sigprocmask.c" 766 "lib/stdio.c" "lib/gl_openssl.h" "lib/sigprocmask.c"
749 "lib/pthread_sigprocmask.c" "lib/ldtoastr.c" "lib/dummy.c" 767 "lib/pthread_sigprocmask.c" "lib/ldtoastr.c" "lib/dummy.c"
750 "lib/ignore-value.h" 768 "lib/ignore-value.h" "lib/Makefile.am"
769 "lib/pathmax.h" "lib/stat.c" "lib/strtoul.c" "lib/strtoull.c"
770 "lib/strtoumax.c" "lib/unsetenv.c"
771 "lib/getopt_cdefs.in.h" "lib/getopt_core.h" "lib/getopt_ext.h"
772 "lib/getopt_pfx_core.h" "lib/getopt_pfx_ext.h"
751 ;; lib-src/ 773 ;; lib-src/
752 "cvtmail.c" "digest-doc.c" "emacsserver.c" "emacstool.c" "env.c" 774 "cvtmail.c" "digest-doc.c" "emacsserver.c" "emacstool.c" "env.c"
753 "etags-vmslib.c" "fakemail.c" "getdate.c" "getopt.h" "getopt1.c" 775 "etags-vmslib.c" "fakemail.c" "getdate.c" "getopt.h" "getopt1.c"
@@ -763,11 +785,22 @@ Changes to files in this list are not listed.")
763 "emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c" 785 "emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
764 "test-distrib.c" "testfile" 786 "test-distrib.c" "testfile"
765 "tpu-edt.doc" ; see below 787 "tpu-edt.doc" ; see below
788 "iso-swed.el"
789 "lisp/obsolete/vc-mcvs.el"
766 "obsolete/vc-mcvs.el" 790 "obsolete/vc-mcvs.el"
767 "nnwarchive.el" 791 "nnwarchive.el"
768 "nnultimate.el" 792 "nnultimate.el"
769 "nnslashdot.el" 793 "nnslashdot.el"
794 "keyswap.el"
795 "mouse-sel.el"
796 "nxml-glyph.el"
797 "tramp-gw.el"
770 "webmail.el" 798 "webmail.el"
799 "biditest.el"
800 "redisplay-testsuite.el"
801 "cedet-utests.el" "ede-tests.el" "semantic-ia-utest.el"
802 "semantic-tests.el" "semantic-utest-c.el" "semantic-utest.el"
803 "srecode-tests.el" "make-test-deps.emacs-lisp"
771 ) 804 )
772 "File names which are valid, but no longer exist (or cannot be found) 805 "File names which are valid, but no longer exist (or cannot be found)
773in the repository.") 806in the repository.")
@@ -879,11 +912,16 @@ in the repository.")
879 ;; From lisp/ to etc/nxml. 912 ;; From lisp/ to etc/nxml.
880 ("nxml/test.invalid.xml" . "test-invalid.xml") 913 ("nxml/test.invalid.xml" . "test-invalid.xml")
881 ("nxml/test.valid.xml" . "test-valid.xml") 914 ("nxml/test.valid.xml" . "test-valid.xml")
915 ("automated/Makefile.in" . "test/Makefile.in")
916 ("rmailmm.el" . "test/rmailmm.el")
882 ;; The one in lisp is eshell/eshell.el. 917 ;; The one in lisp is eshell/eshell.el.
883 ("eshell.el" . "automated/eshell.el") 918 ("eshell.el" . "eshell-tests.el")
884 ("eshell/esh-test.el" . "automated/eshell.el") 919 ("automated/eshell.el" . "eshell-tests.el")
885 ("automated/cl-lib.el" . "automated/cl-lib-tests.el") 920 ("eshell/esh-test.el" . "eshell-tests.el")
886 ("automated/package-x-test.el" . "automated/package-test.el") 921 ("automated/cl-lib.el" . "cl-lib-tests.el")
922 ("automated/cl-lib-tests.el" . "cl-lib-tests.el")
923 ("automated/package-x-test.el" . "package-tests.el")
924 ("automated/package-test.el" . "package-tests.el")
887 ("indent/js-indent-first-initialiser-t.js" . "indent/js-indent-init-t.js") 925 ("indent/js-indent-first-initialiser-t.js" . "indent/js-indent-init-t.js")
888 ("indent/js-indent-first-initialiser-dynamic.js" . 926 ("indent/js-indent-first-initialiser-dynamic.js" .
889 "indent/js-indent-init-dynamic.js") 927 "indent/js-indent-init-dynamic.js")
@@ -930,7 +968,20 @@ in the repository.")
930 ("GNU.JOKES" . "JOKES") 968 ("GNU.JOKES" . "JOKES")
931 ("CHARACTERS" . "TODO") 969 ("CHARACTERS" . "TODO")
932 ("lisp/character-fold.el" . "lisp/char-fold.el") 970 ("lisp/character-fold.el" . "lisp/char-fold.el")
933 ("test/automated/character-fold-tests.el" . "test/automated/char-fold-tests.el") 971 ("test/automated/character-fold-tests.el" . "char-fold-tests.el")
972 ("test/automated/char-fold-tests.el" . "char-fold-tests.el")
973 ("test/lisp/character-fold-tests.el" . "char-fold-tests.el")
974 ("test/manual/cycle-tests.el" . "fns-tests.el")
975 ("test/manual/cyclic-tests.el" . "fns-tests.el")
976 ("test/lisp/dns-mode-tests.el" . "dns-mode-tests.el")
977 ("test/lisp/legacy/core-elisp-tests.el" . "lisp-tests.el")
978 ("test/lisp/legacy/decoder-test.el" . "coding-tests.el")
979 ("test/lisp/legacy/files-tests.el" . "files-tests.el")
980 ("test/lisp/legacy/font-parse-tests.el" . "font-tests.el")
981 ("test/lisp/legacy/lexbind-tests.el" . "bytecomp-test.el")
982 ("test/lisp/legacy/occur-tests.el" . "replace-tests.el")
983 ("test/lisp/legacy/syntax-tests.el" . "syntax-tests.el")
984 ("test/file-organisation.org" . "file-organization.org")
934 ("images/gnus/mail_send.xpm" . "mail-send.xpm") ; still in images/gnus 985 ("images/gnus/mail_send.xpm" . "mail-send.xpm") ; still in images/gnus
935 ("schema/xhtml-basic-form.rnc" . "xhtml-bform.rnc" ) 986 ("schema/xhtml-basic-form.rnc" . "xhtml-bform.rnc" )
936 ("schema/xhtml-basic-table.rnc" . "xhtml-btable.rnc") 987 ("schema/xhtml-basic-table.rnc" . "xhtml-btable.rnc")
@@ -950,6 +1001,7 @@ in the repository.")
950 ("icons/emacs21.ico" . "emacs21.ico") 1001 ("icons/emacs21.ico" . "emacs21.ico")
951 ("ja-dic" . "leim/ja-dic") 1002 ("ja-dic" . "leim/ja-dic")
952 ("quail" . "leim/quail") 1003 ("quail" . "leim/quail")
1004 ("admin/notes/triage" . "bug-triage")
953 ;; Moved from autogen/ to admin/. 1005 ;; Moved from autogen/ to admin/.
954 ("autogen/update_autogen" . "update_autogen") 1006 ("autogen/update_autogen" . "update_autogen")
955 ;; Moved from etc/ to admin/. 1007 ;; Moved from etc/ to admin/.
@@ -1040,9 +1092,13 @@ ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
1040 ;; From test/ to test/automated/. 1092 ;; From test/ to test/automated/.
1041 ("comint-testsuite.el" "automated/\\&") 1093 ("comint-testsuite.el" "automated/\\&")
1042 ("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\ 1094 ("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\
1043-testsuite\\.el" "automated/\\1-tests.el") 1095-testsuite\\.el" "\\1-tests.el")
1044 ("automated/flymake/warnpred/\\(Makefile\\|test\\.\\(?:c\\|pl\\)\\)\\'" 1096 ("automated/flymake/warnpred/\\(Makefile\\|test\\.\\(?:c\\|pl\\)\\)\\'"
1045 "automated/data/flymake/\\1") 1097 "automated/data/flymake/\\1")
1098 ;; More complicated than this, but we only use the basename of the RHS.
1099 ("automated/\\([^/]*-test[^/]*\\.el\\)\\'" "\\1")
1100 ;; Maybe not the exact new name, but disambiguates from lisp/.
1101 ("automated/\\([^/]*\\)\\.el\\'" "\\1-tests.el")
1046 ;; NB lax rules should come last. 1102 ;; NB lax rules should come last.
1047 ("^m/m-\\(.*\\.h\\)$" "m/\\1" t) 1103 ("^m/m-\\(.*\\.h\\)$" "m/\\1" t)
1048 ("^m-\\(.*\\.h\\)$" "\\1" t) 1104 ("^m-\\(.*\\.h\\)$" "\\1" t)
@@ -1076,6 +1132,7 @@ Additionally, for these logs we apply the `lax' elements of
1076 1132
1077(defvar authors-checked-files-alist) 1133(defvar authors-checked-files-alist)
1078(defvar authors-invalid-file-names) 1134(defvar authors-invalid-file-names)
1135(defvar authors-ignored-names)
1079 1136
1080;; This has become rather yucky. :( 1137;; This has become rather yucky. :(
1081(defun authors-disambiguate-file-name (fullname) 1138(defun authors-disambiguate-file-name (fullname)
@@ -1218,7 +1275,7 @@ author and what he did in hash table TABLE. See the description of
1218 (nconc entry (list (cons action 1)))))))) 1275 (nconc entry (list (cons action 1))))))))
1219 1276
1220 1277
1221(defun authors-canonical-author-name (author) 1278(defun authors-canonical-author-name (author file pos)
1222 "Return a canonicalized form of AUTHOR, an author name. 1279 "Return a canonicalized form of AUTHOR, an author name.
1223If AUTHOR has an entry in `authors-aliases', use that. Remove 1280If AUTHOR has an entry in `authors-aliases', use that. Remove
1224email addresses. Capitalize words in the author's name, unless 1281email addresses. Capitalize words in the author's name, unless
@@ -1240,7 +1297,11 @@ it is found in `authors-fixed-case'."
1240 (setq author (replace-regexp-in-string "\\`[ \t]+" "" author)) 1297 (setq author (replace-regexp-in-string "\\`[ \t]+" "" author))
1241 (setq author (replace-regexp-in-string "[ \t]+$" "" author)) 1298 (setq author (replace-regexp-in-string "[ \t]+$" "" author))
1242 (setq author (replace-regexp-in-string "[ \t]+" " " author)) 1299 (setq author (replace-regexp-in-string "[ \t]+" " " author))
1300 ;; NB this ignores the first name only case.
1243 (unless (string-match "[-, \t]" author) 1301 (unless (string-match "[-, \t]" author)
1302 (push (format-message "%s:%d: ignored `%s'"
1303 file (1+ (count-lines (point-min) pos)) author)
1304 authors-ignored-names)
1244 (setq author "")) 1305 (setq author ""))
1245 (or (car (member author authors-fixed-case)) 1306 (or (car (member author authors-fixed-case))
1246 (capitalize author)))) 1307 (capitalize author))))
@@ -1282,7 +1343,7 @@ with the file and the number of each action:
1282Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)"))) 1343Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)")))
1283 (push (authors-canonical-author-name 1344 (push (authors-canonical-author-name
1284 (buffer-substring-no-properties 1345 (buffer-substring-no-properties
1285 (point) (line-end-position))) authors) 1346 (point) (line-end-position)) log-file pos) authors)
1286 (forward-line 1))) 1347 (forward-line 1)))
1287 ((looking-at "^[ \t]+\\*") 1348 ((looking-at "^[ \t]+\\*")
1288 (let ((line (buffer-substring-no-properties 1349 (let ((line (buffer-substring-no-properties
@@ -1315,7 +1376,7 @@ TABLE is a hash table to add author information to."
1315 (enable-local-variables :safe) ; for find-file, hence let* 1376 (enable-local-variables :safe) ; for find-file, hence let*
1316 (enable-local-eval nil) 1377 (enable-local-eval nil)
1317 (buffer (find-file-noselect file))) 1378 (buffer (find-file-noselect file)))
1318 (setq file (authors-disambiguate-file-name (expand-file-name file))) 1379 (setq file (expand-file-name file))
1319 (with-current-buffer buffer 1380 (with-current-buffer buffer
1320 (save-restriction 1381 (save-restriction
1321 (widen) 1382 (widen)
@@ -1332,7 +1393,8 @@ TABLE is a hash table to add author information to."
1332 (skip-chars-forward "-0-9 \t") 1393 (skip-chars-forward "-0-9 \t")
1333 (push (authors-canonical-author-name 1394 (push (authors-canonical-author-name
1334 (buffer-substring-no-properties 1395 (buffer-substring-no-properties
1335 (point) (line-end-position))) authors) 1396 (point) (line-end-position))
1397 file (line-beginning-position)) authors)
1336 ;; tips.texi says the continuation line should begin 1398 ;; tips.texi says the continuation line should begin
1337 ;; with a tab, but often spaces are used. 1399 ;; with a tab, but often spaces are used.
1338 (setq continue 1400 (setq continue
@@ -1343,7 +1405,9 @@ TABLE is a hash table to add author information to."
1343 (and (> (length authors) 1) 1405 (and (> (length authors) 1)
1344 (setq action :cowrote)) 1406 (setq action :cowrote))
1345 (mapc (lambda (author) 1407 (mapc (lambda (author)
1346 (authors-add author file action table)) 1408 (authors-add
1409 author
1410 (authors-disambiguate-file-name file) action table))
1347 authors))))) 1411 authors)))))
1348 (unless existing-buffer 1412 (unless existing-buffer
1349 (kill-buffer buffer)))) 1413 (kill-buffer buffer))))
@@ -1434,7 +1498,8 @@ and a buffer *Authors Errors* containing references to unknown files."
1434 (table (make-hash-table :test 'equal)) 1498 (table (make-hash-table :test 'equal))
1435 (buffer-name "*Authors*") 1499 (buffer-name "*Authors*")
1436 authors-checked-files-alist 1500 authors-checked-files-alist
1437 authors-invalid-file-names) 1501 authors-invalid-file-names
1502 authors-ignored-names)
1438 (authors-add-fixed-entries table) 1503 (authors-add-fixed-entries table)
1439 (dolist (log logs) 1504 (dolist (log logs)
1440 (when (string-match "ChangeLog\\(.[0-9]+\\)?$" log) 1505 (when (string-match "ChangeLog\\(.[0-9]+\\)?$" log)
@@ -1498,14 +1563,20 @@ list of their contributions.\n")
1498 (symbol-name authors-coding-system) "\nEnd:\n") 1563 (symbol-name authors-coding-system) "\nEnd:\n")
1499 (message "Generating buffer %s... done" buffer-name) 1564 (message "Generating buffer %s... done" buffer-name)
1500 (unless noninteractive 1565 (unless noninteractive
1501 (when authors-invalid-file-names 1566 (when (or authors-invalid-file-names authors-ignored-names)
1502 (with-current-buffer (get-buffer-create "*Authors Errors*") 1567 (with-current-buffer (get-buffer-create "*Authors Errors*")
1503 (setq buffer-read-only nil) 1568 (setq buffer-read-only nil)
1504 (erase-buffer) 1569 (erase-buffer)
1505 (set-buffer-file-coding-system authors-coding-system) 1570 (set-buffer-file-coding-system authors-coding-system)
1506 (insert "Unrecognized file entries found:\n\n") 1571 (when authors-invalid-file-names
1507 (mapc (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n"))) 1572 (insert "Unrecognized file entries found:\n\n")
1508 (sort authors-invalid-file-names 'string-lessp)) 1573 (mapc (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n")))
1574 (sort authors-invalid-file-names 'string-lessp)))
1575 (when authors-ignored-names
1576 (insert "\n\nThese authors were ignored:\n\n"
1577 (mapconcat
1578 'identity
1579 (sort authors-ignored-names 'string-lessp) "\n")))
1509 (goto-char (point-min)) 1580 (goto-char (point-min))
1510 (compilation-mode) 1581 (compilation-mode)
1511 (message "Errors were found. See buffer %s" (buffer-name)))) 1582 (message "Errors were found. See buffer %s" (buffer-name))))
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index 52fcd41b1cd..85921ba1ba6 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -30,17 +30,17 @@ GNULIB_MODULES='
30 careadlinkat close-stream 30 careadlinkat close-stream
31 count-leading-zeros count-one-bits count-trailing-zeros 31 count-leading-zeros count-one-bits count-trailing-zeros
32 crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 32 crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512
33 dtoastr dtotimespec dup2 environ execinfo faccessat 33 diffseq dtoastr dtotimespec dup2 environ execinfo faccessat
34 fcntl fcntl-h fdatasync fdopendir 34 fcntl fcntl-h fdatasync fdopendir
35 filemode filevercmp flexmember fstatat fsync 35 filemode filevercmp flexmember fstatat fsync
36 getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog 36 getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog
37 ignore-value intprops largefile lstat 37 ignore-value intprops largefile lstat
38 manywarnings memrchr mkostemp mktime 38 manywarnings memrchr minmax mkostemp mktime
39 pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat 39 pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat
40 sig2str socklen stat-time std-gnu11 stdalign stddef stdio 40 sig2str socklen stat-time std-gnu11 stdalign stddef stdio
41 stpcpy strftime strtoimax strtoumax symlink sys_stat 41 stpcpy strftime strtoimax symlink sys_stat
42 sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub 42 sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub
43 update-copyright utimens 43 update-copyright unlocked-io utimens
44 vla warnings 44 vla warnings
45' 45'
46 46
@@ -48,8 +48,8 @@ AVOIDED_MODULES='
48 close dup fchdir fstat 48 close dup fchdir fstat
49 malloc-posix msvc-inval msvc-nothrow 49 malloc-posix msvc-inval msvc-nothrow
50 open openat-die opendir raise 50 open openat-die opendir raise
51 save-cwd select setenv sigprocmask stdarg stdbool 51 save-cwd select setenv sigprocmask stat stdarg stdbool
52 threadlib unsetenv 52 threadlib tzset unsetenv utime utime-h
53' 53'
54 54
55GNULIB_TOOL_FLAGS=' 55GNULIB_TOOL_FLAGS='
diff --git a/admin/notes/repo b/admin/notes/repo
index 3ab3da78071..0da1e1e227a 100644
--- a/admin/notes/repo
+++ b/admin/notes/repo
@@ -1,12 +1,5 @@
1NOTES ON COMMITTING TO EMACS'S REPOSITORY -*- outline -*- 1NOTES ON COMMITTING TO EMACS'S REPOSITORY -*- outline -*-
2 2
3** elpa
4
5This branch does not contain a copy of Emacs, but of the Emacs Lisp
6package archive (elpa.gnu.org). See admin/notes/elpa for further
7explanation, and the README file in the branch for usage
8instructions.
9
10* Install changes only on one branch, let them get merged elsewhere if needed. 3* Install changes only on one branch, let them get merged elsewhere if needed.
11 4
12In particular, install bug-fixes only on the release branch (if there 5In particular, install bug-fixes only on the release branch (if there
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index f58303b6d76..5cc43bc3718 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -33,6 +33,9 @@ EMACS = ${top_builddir}/src/emacs
33unidir = ${top_srcdir}/lisp/international 33unidir = ${top_srcdir}/lisp/international
34emacs = "${EMACS}" -batch --no-site-file --no-site-lisp 34emacs = "${EMACS}" -batch --no-site-file --no-site-lisp
35 35
36lparen = (
37unifiles = $(addprefix ${unidir}/,$(sort $(shell sed -n 's/^[ \t][ \t]*${lparen}"\(uni-[^"]*\)"$$/\1/p' ${srcdir}/unidata-gen.el)))
38
36# 'make' verbosity. 39# 'make' verbosity.
37AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 40AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
38 41
@@ -51,9 +54,10 @@ am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
51am__v_at_0 = @ 54am__v_at_0 = @
52am__v_at_1 = 55am__v_at_1 =
53 56
54.PHONY: all unifiles 57.PHONY: all
55 58
56all: ${top_srcdir}/src/macuvs.h unifiles ${unidir}/charscript.el 59all: ${top_srcdir}/src/macuvs.h ${unifiles} ${unidir}/charscript.el \
60 ${unidir}/charprop.el
57 61
58## Specify .elc as an order-only prereq so as to not needlessly rebuild 62## Specify .elc as an order-only prereq so as to not needlessly rebuild
59## target just because the .elc is missing. 63## target just because the .elc is missing.
@@ -71,30 +75,21 @@ unidata.txt: ${srcdir}/UnicodeData.txt
71 $(AM_V_GEN)sed -e 's/\([^;]*\);\(.*\)/(#x\1 "\2")/' -e 's/;/" "/g' \ 75 $(AM_V_GEN)sed -e 's/\([^;]*\);\(.*\)/(#x\1 "\2")/' -e 's/;/" "/g' \
72 < $< > $@ 76 < $< > $@
73 77
74PHONY_EXTRAS = 78## charprop doesn't actually depend on unifiles, but for now at least
75.PHONY: $(PHONY_EXTRAS) 79## pretend that it does since other Makefiles assume that if charprop
80## is up-to-date, the unifiles are too.
81${unidir}/charprop.el: ${unifiles} ${srcdir}/unidata-gen.el | ${srcdir}/unidata-gen.elc
82 $(AM_V_at)[ ! -f $@ ] || chmod +w $@
83 $(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \
84 -f unidata-gen-charprop $@
76 85
77${unidir}/charprop.el: ${srcdir}/unidata-gen.el \ 86${unifiles}: ${srcdir}/unidata-gen.el \
78 ${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \ 87 ${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \
79 ${srcdir}/BidiBrackets.txt | \ 88 ${srcdir}/BidiBrackets.txt | \
80 ${srcdir}/unidata-gen.elc unidata.txt 89 ${srcdir}/unidata-gen.elc unidata.txt
81 ifneq (,$(wildcard $@)) 90 $(AM_V_at)[ ! -f $@ ] || chmod +w $@
82 $(AM_V_at)cd $(unidir) && \ 91 $(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \
83 for f in charprop.el `sed -n 's/^;; FILE: //p' < charprop.el`; do \ 92 -f unidata-gen-file $@ ${srcdir}
84 [ ! -f $$f ] || [ -w $$f ] || chmod +w $$f || exit; \
85 done
86 endif
87 $(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen -f unidata-gen-files \
88 ${srcdir} "${unidir}"
89
90## Check for deleted uni- files, and if any such, force a rebuild.
91## Perhaps a more elegant way would be for the previous rule
92## to generate a Makefile fragment explicitly listing the uni- files,
93## which this file could include. If no fragment, rebuild everything.
94unifiles: ${unidir}/charprop.el
95 $(AM_V_at)for f in `sed -n 's/^;; FILE: //p' < $<`; do \
96 [ -f $(unidir)/$$f ] || exec $(MAKE) PHONY_EXTRAS=$< $<; \
97 done
98 93
99 94
100.PHONY: charscript.el 95.PHONY: charscript.el
@@ -123,7 +118,5 @@ maintainer-clean: distclean
123## Cf leim/ja-dic (which is much slower). 118## Cf leim/ja-dic (which is much slower).
124extraclean: 119extraclean:
125 rm -f ${top_srcdir}/src/macuvs.h ${unidir}/charscript.el* 120 rm -f ${top_srcdir}/src/macuvs.h ${unidir}/charscript.el*
126 ifneq (,$(wildcard $(unidir)/charprop.el)) 121 rm -f ${unifiles} ${unidir}/charprop.el
127 cd $(unidir) && \ 122
128 rm -f `sed -n 's/^;; FILE: //p' < charprop.el` charprop.el
129 endif
diff --git a/admin/unidata/README b/admin/unidata/README
index 534670ce6db..06a66663a72 100644
--- a/admin/unidata/README
+++ b/admin/unidata/README
@@ -24,3 +24,7 @@ http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
24NormalizationTest.txt 24NormalizationTest.txt
25http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt 25http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
262016-07-16 262016-07-16
27
28SpecialCasing.txt
29http://unicode.org/Public/UNIDATA/SpecialCasing.txt
302016-03-03
diff --git a/admin/unidata/SpecialCasing.txt b/admin/unidata/SpecialCasing.txt
new file mode 100644
index 00000000000..b23fa7f7680
--- /dev/null
+++ b/admin/unidata/SpecialCasing.txt
@@ -0,0 +1,281 @@
1# SpecialCasing-9.0.0.txt
2# Date: 2016-03-02, 18:55:13 GMT
3# © 2016 Unicode®, Inc.
4# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
5# For terms of use, see http://www.unicode.org/terms_of_use.html
6#
7# Unicode Character Database
8# For documentation, see http://www.unicode.org/reports/tr44/
9#
10# Special Casing
11#
12# This file is a supplement to the UnicodeData.txt file. It does not define any
13# properties, but rather provides additional information about the casing of
14# Unicode characters, for situations when casing incurs a change in string length
15# or is dependent on context or locale. For compatibility, the UnicodeData.txt
16# file only contains simple case mappings for characters where they are one-to-one
17# and independent of context and language. The data in this file, combined with
18# the simple case mappings in UnicodeData.txt, defines the full case mappings
19# Lowercase_Mapping (lc), Titlecase_Mapping (tc), and Uppercase_Mapping (uc).
20#
21# Note that the preferred mechanism for defining tailored casing operations is
22# the Unicode Common Locale Data Repository (CLDR). For more information, see the
23# discussion of case mappings and case algorithms in the Unicode Standard.
24#
25# All code points not listed in this file that do not have a simple case mappings
26# in UnicodeData.txt map to themselves.
27# ================================================================================
28# Format
29# ================================================================================
30# The entries in this file are in the following machine-readable format:
31#
32# <code>; <lower>; <title>; <upper>; (<condition_list>;)? # <comment>
33#
34# <code>, <lower>, <title>, and <upper> provide the respective full case mappings
35# of <code>, expressed as character values in hex. If there is more than one character,
36# they are separated by spaces. Other than as used to separate elements, spaces are
37# to be ignored.
38#
39# The <condition_list> is optional. Where present, it consists of one or more language IDs
40# or casing contexts, separated by spaces. In these conditions:
41# - A condition list overrides the normal behavior if all of the listed conditions are true.
42# - The casing context is always the context of the characters in the original string,
43# NOT in the resulting string.
44# - Case distinctions in the condition list are not significant.
45# - Conditions preceded by "Not_" represent the negation of the condition.
46# The condition list is not represented in the UCD as a formal property.
47#
48# A language ID is defined by BCP 47, with '-' and '_' treated equivalently.
49#
50# A casing context for a character is defined by Section 3.13 Default Case Algorithms
51# of The Unicode Standard.
52#
53# Parsers of this file must be prepared to deal with future additions to this format:
54# * Additional contexts
55# * Additional fields
56# ================================================================================
57
58# ================================================================================
59# Unconditional mappings
60# ================================================================================
61
62# The German es-zed is special--the normal mapping is to SS.
63# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
64
6500DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
66
67# Preserve canonical equivalence for I with dot. Turkic is handled below.
68
690130; 0069 0307; 0130; 0130; # LATIN CAPITAL LETTER I WITH DOT ABOVE
70
71# Ligatures
72
73FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
74FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
75FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
76FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
77FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
78FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
79FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
80
810587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
82FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
83FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
84FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
85FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
86FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
87
88# No corresponding uppercase precomposed character
89
900149; 0149; 02BC 004E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
910390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
9203B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
9301F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
941E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
951E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
961E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
971E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
981E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
991F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
1001F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
1011F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
1021F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
1031FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
1041FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
1051FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
1061FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
1071FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
1081FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
1091FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
1101FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
1111FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
1121FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
1131FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
1141FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
115
116# IMPORTANT-when iota-subscript (0345) is uppercased or titlecased,
117# the result will be incorrect unless the iota-subscript is moved to the end
118# of any sequence of combining marks. Otherwise, the accents will go on the capital iota.
119# This process can be achieved by first transforming the text to NFC before casing.
120# E.g. <alpha><iota_subscript><acute> is uppercased to <ALPHA><acute><IOTA>
121
122# The following cases are already in the UnicodeData.txt file, so are only commented here.
123
124# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
125
126# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
127# have special uppercases.
128# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
129
1301F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
1311F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
1321F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
1331F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
1341F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
1351F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
1361F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
1371F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
1381F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
1391F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
1401F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
1411F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
1421F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
1431F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
1441F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
1451F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
1461F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
1471F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
1481F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
1491F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
1501F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
1511F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
1521F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
1531F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
1541F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
1551F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
1561F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
1571F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
1581F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
1591F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
1601F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
1611F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
1621FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
1631FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
1641FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
1651FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
1661FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
1671FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
1681FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
1691FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
1701FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
1711FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
1721FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
1731FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
1741FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
1751FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
1761FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
1771FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
1781FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
1791FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
1801FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
1811FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
1821FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
1831FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
184
185# Some characters with YPOGEGRAMMENI also have no corresponding titlecases
186
1871FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
1881FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
1891FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
1901FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
1911FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
1921FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
193
1941FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
1951FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
1961FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
197
198# ================================================================================
199# Conditional Mappings
200# The remainder of this file provides conditional casing data used to produce
201# full case mappings.
202# ================================================================================
203# Language-Insensitive Mappings
204# These are characters whose full case mappings do not depend on language, but do
205# depend on context (which characters come before or after). For more information
206# see the header of this file and the Unicode Standard.
207# ================================================================================
208
209# Special case for final form of sigma
210
21103A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA
212
213# Note: the following cases for non-final are already in the UnicodeData.txt file.
214
215# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
216# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
217# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
218
219# Note: the following cases are not included, since they would case-fold in lowercasing
220
221# 03C3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK SMALL LETTER SIGMA
222# 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA
223
224# ================================================================================
225# Language-Sensitive Mappings
226# These are characters whose full case mappings depend on language and perhaps also
227# context (which characters come before or after). For more information
228# see the header of this file and the Unicode Standard.
229# ================================================================================
230
231# Lithuanian
232
233# Lithuanian retains the dot in a lowercase i when followed by accents.
234
235# Remove DOT ABOVE after "i" with upper or titlecase
236
2370307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE
238
239# Introduce an explicit dot above when lowercasing capital I's and J's
240# whenever there are more accents above.
241# (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek)
242
2430049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I
244004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J
245012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK
24600CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE
24700CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE
2480128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE
249
250# ================================================================================
251
252# Turkish and Azeri
253
254# I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
255# The following rules handle those cases.
256
2570130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE
2580130; 0069; 0130; 0130; az; # LATIN CAPITAL LETTER I WITH DOT ABOVE
259
260# When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
261# This matches the behavior of the canonically equivalent I-dot_above
262
2630307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE
2640307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
265
266# When lowercasing, unless an I is before a dot_above, it turns into a dotless i.
267
2680049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I
2690049; 0131; 0049; 0049; az Not_Before_Dot; # LATIN CAPITAL LETTER I
270
271# When uppercasing, i turns into a dotted capital I
272
2730069; 0069; 0130; 0130; tr; # LATIN SMALL LETTER I
2740069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I
275
276# Note: the following case is already in the UnicodeData.txt file.
277
278# 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I
279
280# EOF
281
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index 3c5119a8a3d..478099c831a 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -26,12 +26,12 @@
26;; SPECIAL NOTICE 26;; SPECIAL NOTICE
27;; 27;;
28;; This file must be byte-compilable/loadable by `temacs' and also 28;; This file must be byte-compilable/loadable by `temacs' and also
29;; the entry function `unidata-gen-files' must be runnable by `temacs'. 29;; the entry function `unidata-gen-file' must be runnable by `temacs'.
30 30
31;; FILES TO BE GENERATED 31;; FILES TO BE GENERATED
32;; 32;;
33;; The entry function `unidata-gen-files' generates these files in 33;; The entry functions `unidata-gen-file' and `unidata-gen-charprop'
34;; in directory specified by its dest-dir argument. 34;; generate these files:
35;; 35;;
36;; charprop.el 36;; charprop.el
37;; It contains a series of forms of this format: 37;; It contains a series of forms of this format:
@@ -94,7 +94,7 @@
94 94
95;; Name of the directory containing files of Unicode Character Database. 95;; Name of the directory containing files of Unicode Character Database.
96 96
97;; Dynamically bound in unidata-gen-files. 97;; Dynamically bound in unidata-gen-file.
98(defvar unidata-dir nil) 98(defvar unidata-dir nil)
99 99
100(defun unidata-setup-list (unidata-text-file) 100(defun unidata-setup-list (unidata-text-file)
@@ -149,14 +149,14 @@
149 (setq unidata-list (cdr table)))) 149 (setq unidata-list (cdr table))))
150 150
151;; Alist of this form: 151;; Alist of this form:
152;; (PROP INDEX GENERATOR FILENAME DOCSTRING DESCRIBER DEFAULT VAL-LIST) 152;; (FILENAME (PROP INDEX GENERATOR DOCSTRING DESCRIBER DEFAULT VAL-LIST) ...)
153;; FILENAME: filename to store the char-table(s)
153;; PROP: character property 154;; PROP: character property
154;; INDEX: index to each element of unidata-list for PROP. 155;; INDEX: index to each element of unidata-list for PROP.
155;; It may be a function that generates an alist of character codes 156;; It may be a function that generates an alist of character codes
156;; vs. the corresponding property values. Currently, only character 157;; vs. the corresponding property values. Currently, only character
157;; codepoints or symbol values are supported in this case. 158;; codepoints or symbol values are supported in this case.
158;; GENERATOR: function to generate a char-table 159;; GENERATOR: function to generate a char-table
159;; FILENAME: filename to store the char-table
160;; DOCSTRING: docstring for the property 160;; DOCSTRING: docstring for the property
161;; DESCRIBER: function to call to get a description string of property value 161;; DESCRIBER: function to call to get a description string of property value
162;; DEFAULT: the default value of the property. It may have the form 162;; DEFAULT: the default value of the property. It may have the form
@@ -166,139 +166,196 @@
166;; between FROMn and TOn is VALn. 166;; between FROMn and TOn is VALn.
167;; VAL-LIST: list of specially ordered property values 167;; VAL-LIST: list of specially ordered property values
168 168
169(defconst unidata-prop-alist 169(defconst unidata-file-alist
170 '((name 170 '(
171 1 unidata-gen-table-name "uni-name.el" 171 ;; NB this list is parsed by the Makefile to extract the names of
172 "Unicode character name. 172 ;; the uni-*.el files, so preserve the formatting of those lines.
173 ("uni-name.el"
174 (name
175 1 unidata-gen-table-name
176 "Unicode character name.
173Property value is a string or nil. 177Property value is a string or nil.
174The value nil stands for the default value \"null string\")." 178The value nil stands for the default value \"null string\")."
175 nil 179 nil
176 nil) 180 nil))
177 (general-category 181 ("uni-category.el"
178 2 unidata-gen-table-symbol "uni-category.el" 182 (general-category
179 "Unicode general category. 183 2 unidata-gen-table-symbol
184 "Unicode general category.
180Property value is one of the following symbols: 185Property value is one of the following symbols:
181 Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pc, Pd, Ps, Pe, Pi, Pf, Po, 186 Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pc, Pd, Ps, Pe, Pi, Pf, Po,
182 Sm, Sc, Sk, So, Zs, Zl, Zp, Cc, Cf, Cs, Co, Cn" 187 Sm, Sc, Sk, So, Zs, Zl, Zp, Cc, Cf, Cs, Co, Cn"
183 unidata-describe-general-category 188 unidata-describe-general-category
184 Cn 189 Cn
185 ;; The order of elements must be in sync with unicode_category_t 190 ;; The order of elements must be in sync with
186 ;; in src/character.h. 191 ;; unicode_category_t in src/character.h.
187 (Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd Ps Pe Pi Pf Po 192 (Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd Ps Pe Pi Pf Po
188 Sm Sc Sk So Zs Zl Zp Cc Cf Cs Co Cn)) 193 Sm Sc Sk So Zs Zl Zp Cc Cf Cs Co Cn)))
189 (canonical-combining-class 194 ("uni-combining.el"
190 3 unidata-gen-table-integer "uni-combining.el" 195 (canonical-combining-class
191 "Unicode canonical combining class. 196 3 unidata-gen-table-integer
197 "Unicode canonical combining class.
192Property value is an integer." 198Property value is an integer."
193 unidata-describe-canonical-combining-class 199 unidata-describe-canonical-combining-class
194 0) 200 0))
195 (bidi-class 201 ("uni-bidi.el"
196 4 unidata-gen-table-symbol "uni-bidi.el" 202 (bidi-class
197 "Unicode bidi class. 203 4 unidata-gen-table-symbol
204 "Unicode bidi class.
198Property value is one of the following symbols: 205Property value is one of the following symbols:
199 L, LRE, LRO, LRI, R, AL, RLE, RLO, RLI, FSI, PDF, PDI, 206 L, LRE, LRO, LRI, R, AL, RLE, RLO, RLI, FSI, PDF, PDI,
200 EN, ES, ET, AN, CS, NSM, BN, B, S, WS, ON" 207 EN, ES, ET, AN, CS, NSM, BN, B, S, WS, ON"
201 unidata-describe-bidi-class 208 unidata-describe-bidi-class
202 ;; The assignment of default values to blocks of code points 209 ;; The assignment of default values to blocks of code points
203 ;; follows the file DerivedBidiClass.txt from the Unicode 210 ;; follows the file DerivedBidiClass.txt from the Unicode
204 ;; Character Database (UCD). 211 ;; Character Database (UCD).
205 (L (#x0600 #x06FF AL) (#xFB50 #xFDFF AL) (#xFE70 #xFEFF AL) 212 (L (#x0600 #x06FF AL) (#xFB50 #xFDFF AL) (#xFE70 #xFEFF AL)
206 (#x0590 #x05FF R) (#x07C0 #x08FF R) 213 (#x0590 #x05FF R) (#x07C0 #x08FF R)
207 (#xFB1D #xFB4F R) (#x10800 #x10FFF R) (#x1E800 #x1EFFF R)) 214 (#xFB1D #xFB4F R) (#x10800 #x10FFF R) (#x1E800 #x1EFFF R))
208 ;; The order of elements must be in sync with bidi_type_t in 215 ;; The order of elements must be in sync with bidi_type_t in
209 ;; src/dispextern.h. 216 ;; src/dispextern.h.
210 (L R EN AN BN B AL LRE LRO RLE RLO PDF LRI RLI FSI PDI 217 (L R EN AN BN B AL LRE LRO RLE RLO PDF LRI RLI FSI PDI
211 ES ET CS NSM S WS ON)) 218 ES ET CS NSM S WS ON)))
212 (decomposition 219 ("uni-decomposition.el"
213 5 unidata-gen-table-decomposition "uni-decomposition.el" 220 (decomposition
214 "Unicode decomposition mapping. 221 5 unidata-gen-table-decomposition
222 "Unicode decomposition mapping.
215Property value is a list of characters. The first element may be 223Property value is a list of characters. The first element may be
216one of these symbols representing compatibility formatting tag: 224one of these symbols representing compatibility formatting tag:
217 font, noBreak, initial, medial, final, isolated, circle, super, 225 font, noBreak, initial, medial, final, isolated, circle, super,
218 sub, vertical, wide, narrow, small, square, fraction, compat" 226 sub, vertical, wide, narrow, small, square, fraction, compat"
219 unidata-describe-decomposition) 227 unidata-describe-decomposition))
220 (decimal-digit-value 228 ("uni-decimal.el"
221 6 unidata-gen-table-integer "uni-decimal.el" 229 (decimal-digit-value
222 "Unicode numeric value (decimal digit). 230 6 unidata-gen-table-integer
231 "Unicode numeric value (decimal digit).
223Property value is an integer 0..9, or nil. 232Property value is an integer 0..9, or nil.
224The value nil stands for NaN \"Numeric_Value\".") 233The value nil stands for NaN \"Numeric_Value\"."))
225 (digit-value 234 ("uni-digit.el"
226 7 unidata-gen-table-integer "uni-digit.el" 235 (digit-value
227 "Unicode numeric value (digit). 236 7 unidata-gen-table-integer
237 "Unicode numeric value (digit).
228Property value is an integer 0..9, or nil. 238Property value is an integer 0..9, or nil.
229The value nil stands for NaN \"Numeric_Value\".") 239The value nil stands for NaN \"Numeric_Value\"."))
230 (numeric-value 240 ("uni-numeric.el"
231 8 unidata-gen-table-numeric "uni-numeric.el" 241 (numeric-value
232 "Unicode numeric value (numeric). 242 8 unidata-gen-table-numeric
243 "Unicode numeric value (numeric).
233Property value is an integer, a floating point, or nil. 244Property value is an integer, a floating point, or nil.
234The value nil stands for NaN \"Numeric_Value\".") 245The value nil stands for NaN \"Numeric_Value\"."))
235 (mirrored 246 ("uni-mirrored.el"
236 9 unidata-gen-table-symbol "uni-mirrored.el" 247 (mirrored
237 "Unicode bidi mirrored flag. 248 9 unidata-gen-table-symbol
249 "Unicode bidi mirrored flag.
238Property value is a symbol `Y' or `N'. See also the property `mirroring'." 250Property value is a symbol `Y' or `N'. See also the property `mirroring'."
239 nil 251 nil
240 N) 252 N)
241 (old-name 253 (mirroring
242 10 unidata-gen-table-name "uni-old-name.el" 254 unidata-gen-mirroring-list unidata-gen-table-character
243 "Unicode old names as published in Unicode 1.0. 255 "Unicode bidi-mirroring characters.
256Property value is a character that has the corresponding mirroring image or nil.
257The value nil means that the actual property value of a character
258is the character itself."))
259 ("uni-old-name.el"
260 (old-name
261 10 unidata-gen-table-name
262 "Unicode old names as published in Unicode 1.0.
244Property value is a string or nil. 263Property value is a string or nil.
245The value nil stands for the default value \"null string\").") 264The value nil stands for the default value \"null string\")."))
246 (iso-10646-comment 265 ("uni-comment.el"
247 11 unidata-gen-table-name "uni-comment.el" 266 (iso-10646-comment
248 "Unicode ISO 10646 comment. 267 11 unidata-gen-table-name
249Property value is a string.") 268 "Unicode ISO 10646 comment.
250 (uppercase 269Property value is a string."))
251 12 unidata-gen-table-character "uni-uppercase.el" 270 ("uni-uppercase.el"
252 "Unicode simple uppercase mapping. 271 (uppercase
272 12 unidata-gen-table-character
273 "Unicode simple uppercase mapping.
253Property value is a character or nil. 274Property value is a character or nil.
254The value nil means that the actual property value of a character 275The value nil means that the actual property value of a character
255is the character itself." 276is the character itself."
256 string) 277 string))
257 (lowercase 278 ("uni-lowercase.el"
258 13 unidata-gen-table-character "uni-lowercase.el" 279 (lowercase
259 "Unicode simple lowercase mapping. 280 13 unidata-gen-table-character
281 "Unicode simple lowercase mapping.
260Property value is a character or nil. 282Property value is a character or nil.
261The value nil means that the actual property value of a character 283The value nil means that the actual property value of a character
262is the character itself." 284is the character itself."
263 string) 285 string))
264 (titlecase 286 ("uni-titlecase.el"
265 14 unidata-gen-table-character "uni-titlecase.el" 287 (titlecase
266 "Unicode simple titlecase mapping. 288 14 unidata-gen-table-character
289 "Unicode simple titlecase mapping.
267Property value is a character or nil. 290Property value is a character or nil.
268The value nil means that the actual property value of a character 291The value nil means that the actual property value of a character
269is the character itself." 292is the character itself."
270 string) 293 string))
271 (mirroring 294 ("uni-special-uppercase.el"
272 unidata-gen-mirroring-list unidata-gen-table-character "uni-mirrored.el" 295 (special-uppercase
273 "Unicode bidi-mirroring characters. 296 2 unidata-gen-table-special-casing
274Property value is a character that has the corresponding mirroring image or nil. 297 "Unicode unconditional special casing mapping.
275The value nil means that the actual property value of a character 298
276is the character itself.") 299Property value is (possibly empty) string or nil. The value nil denotes that
277 (paired-bracket 300`uppercase' property should be consulted instead. A string denotes what
278 unidata-gen-brackets-list unidata-gen-table-character "uni-brackets.el" 301sequence of characters given character maps into.
279 "Unicode bidi paired-bracket characters. 302
303This mapping includes language- and context-independent special casing rules
304defined by Unicode only. It also does not include association which would
305duplicate information from `uppercase' property."
306 nil))
307 ("uni-special-lowercase.el"
308 (special-lowercase
309 0 unidata-gen-table-special-casing
310 "Unicode unconditional special casing mapping.
311
312Property value is (possibly empty) string or nil. The value nil denotes that
313`lowercase' property should be consulted instead. A string denotes what
314sequence of characters given character maps into.
315
316This mapping includes language- and context-independent special casing rules
317defined by Unicode only. It also does not include association which would
318duplicate information from `lowercase' property."
319 nil))
320 ("uni-special-titlecase.el"
321 (special-titlecase
322 1 unidata-gen-table-special-casing
323 "Unicode unconditional special casing mapping.
324
325Property value is (possibly empty) string or nil. The value nil denotes that
326`titlecase' property should be consulted instead. A string denotes what
327sequence of characters given character maps into.
328
329This mapping includes language- and context-independent special casing rules
330defined by Unicode only. It also does not include association which would
331duplicate information from `titlecase' property."
332 nil))
333 ("uni-brackets.el"
334 (paired-bracket
335 unidata-gen-brackets-list unidata-gen-table-character
336 "Unicode bidi paired-bracket characters.
280Property value is the paired bracket character, or nil. 337Property value is the paired bracket character, or nil.
281The value nil means that the character is neither an opening nor 338The value nil means that the character is neither an opening nor
282a closing paired bracket." 339a closing paired bracket."
283 string) 340 string)
284 (bracket-type 341 (bracket-type
285 unidata-gen-bracket-type-list unidata-gen-table-symbol "uni-brackets.el" 342 unidata-gen-bracket-type-list unidata-gen-table-symbol
286 "Unicode bidi paired-bracket type. 343 "Unicode bidi paired-bracket type.
287Property value is a symbol `o' (Open), `c' (Close), or `n' (None)." 344Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
288 unidata-describe-bidi-bracket-type 345 unidata-describe-bidi-bracket-type
289 n 346 n
290 ;; The order of elements must be in sync with bidi_bracket_type_t 347 ;; The order of elements must be in sync with bidi_bracket_type_t
291 ;; in src/dispextern.h. 348 ;; in src/dispextern.h.
292 (n o c)))) 349 (n o c)))))
293 350
294;; Functions to access the above data. 351;; Functions to access the above data.
295(defsubst unidata-prop-index (prop) (nth 1 (assq prop unidata-prop-alist))) 352(defsubst unidata-prop-prop (proplist) (nth 0 proplist))
296(defsubst unidata-prop-generator (prop) (nth 2 (assq prop unidata-prop-alist))) 353(defsubst unidata-prop-index (proplist) (nth 1 proplist))
297(defsubst unidata-prop-file (prop) (nth 3 (assq prop unidata-prop-alist))) 354(defsubst unidata-prop-generator (proplist) (nth 2 proplist))
298(defsubst unidata-prop-docstring (prop) (nth 4 (assq prop unidata-prop-alist))) 355(defsubst unidata-prop-docstring (proplist) (nth 3 proplist))
299(defsubst unidata-prop-describer (prop) (nth 5 (assq prop unidata-prop-alist))) 356(defsubst unidata-prop-describer (proplist) (nth 4 proplist))
300(defsubst unidata-prop-default (prop) (nth 6 (assq prop unidata-prop-alist))) 357(defsubst unidata-prop-default (proplist) (nth 5 proplist))
301(defsubst unidata-prop-val-list (prop) (nth 7 (assq prop unidata-prop-alist))) 358(defsubst unidata-prop-val-list (proplist) (nth 6 proplist))
302 359
303 360
304;; SIMPLE TABLE 361;; SIMPLE TABLE
@@ -326,9 +383,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
326;; 3rd: 0 (corresponding to uniprop_encode_character in chartab.c) 383;; 3rd: 0 (corresponding to uniprop_encode_character in chartab.c)
327;; 4th to 5th: nil 384;; 4th to 5th: nil
328 385
329(defun unidata-gen-table-character (prop &rest ignore) 386(defun unidata-gen-table-character (prop prop-idx &rest ignore)
330 (let ((table (make-char-table 'char-code-property-table)) 387 (let ((table (make-char-table 'char-code-property-table))
331 (prop-idx (unidata-prop-index prop))
332 (vec (make-vector 128 0)) 388 (vec (make-vector 128 0))
333 (tail unidata-list) 389 (tail unidata-list)
334 elt range val idx slot) 390 elt range val idx slot)
@@ -433,13 +489,12 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
433 489
434;; Generate a char-table for the character property PROP. 490;; Generate a char-table for the character property PROP.
435 491
436(defun unidata-gen-table (prop val-func default-value val-list) 492(defun unidata-gen-table (prop prop-idx val-func default-value val-list)
437 (let ((table (make-char-table 'char-code-property-table)) 493 (let ((table (make-char-table 'char-code-property-table))
438 (prop-idx (unidata-prop-index prop))
439 (vec (make-vector 128 0)) 494 (vec (make-vector 128 0))
440 ;; When this warning is printed, there's a need to make the 495 ;; When this warning is printed, there's a need to make the
441 ;; following changes: 496 ;; following changes:
442 ;; (1) update unidata-prop-alist with the new bidi-class values; 497 ;; (1) update unidata-file-alist with the new bidi-class values;
443 ;; (2) extend bidi_type_t enumeration on src/dispextern.h to 498 ;; (2) extend bidi_type_t enumeration on src/dispextern.h to
444 ;; include the new classes; 499 ;; include the new classes;
445 ;; (3) possibly update the assertion in bidi.c:bidi_check_type; and 500 ;; (3) possibly update the assertion in bidi.c:bidi_check_type; and
@@ -560,8 +615,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
560 (set-char-table-extra-slot table 4 (vconcat (mapcar 'car val-list))) 615 (set-char-table-extra-slot table 4 (vconcat (mapcar 'car val-list)))
561 table)) 616 table))
562 617
563(defun unidata-gen-table-symbol (prop default-value val-list) 618(defun unidata-gen-table-symbol (prop index default-value val-list)
564 (let ((table (unidata-gen-table prop 619 (let ((table (unidata-gen-table prop index
565 #'(lambda (x) (and (> (length x) 0) 620 #'(lambda (x) (and (> (length x) 0)
566 (intern x))) 621 (intern x)))
567 default-value val-list))) 622 default-value val-list)))
@@ -569,8 +624,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
569 (set-char-table-extra-slot table 2 1) 624 (set-char-table-extra-slot table 2 1)
570 table)) 625 table))
571 626
572(defun unidata-gen-table-integer (prop default-value val-list) 627(defun unidata-gen-table-integer (prop index default-value val-list)
573 (let ((table (unidata-gen-table prop 628 (let ((table (unidata-gen-table prop index
574 #'(lambda (x) (and (> (length x) 0) 629 #'(lambda (x) (and (> (length x) 0)
575 (string-to-number x))) 630 (string-to-number x)))
576 default-value val-list))) 631 default-value val-list)))
@@ -578,8 +633,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
578 (set-char-table-extra-slot table 2 1) 633 (set-char-table-extra-slot table 2 1)
579 table)) 634 table))
580 635
581(defun unidata-gen-table-numeric (prop default-value val-list) 636(defun unidata-gen-table-numeric (prop index default-value val-list)
582 (let ((table (unidata-gen-table prop 637 (let ((table (unidata-gen-table prop index
583 #'(lambda (x) 638 #'(lambda (x)
584 (if (string-match "/" x) 639 (if (string-match "/" x)
585 (/ (float (string-to-number x)) 640 (/ (float (string-to-number x))
@@ -885,9 +940,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
885 940
886;; Generate a char-table for character names. 941;; Generate a char-table for character names.
887 942
888(defun unidata-gen-table-word-list (prop val-func) 943(defun unidata-gen-table-word-list (prop prop-idx val-func)
889 (let ((table (make-char-table 'char-code-property-table)) 944 (let ((table (make-char-table 'char-code-property-table))
890 (prop-idx (unidata-prop-index prop))
891 (word-list (list nil)) 945 (word-list (list nil))
892 word-table 946 word-table
893 block-list block-word-table block-end 947 block-list block-word-table block-end
@@ -1032,8 +1086,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
1032 (or (byte-code-function-p (symbol-function fun)) 1086 (or (byte-code-function-p (symbol-function fun))
1033 (byte-compile fun)))) 1087 (byte-compile fun))))
1034 1088
1035(defun unidata-gen-table-name (prop &rest ignore) 1089(defun unidata-gen-table-name (prop index &rest ignore)
1036 (let* ((table (unidata-gen-table-word-list prop 'unidata-split-name)) 1090 (let* ((table (unidata-gen-table-word-list prop index 'unidata-split-name))
1037 (word-tables (char-table-extra-slot table 4))) 1091 (word-tables (char-table-extra-slot table 4)))
1038 (unidata--ensure-compiled 'unidata-get-name 'unidata-put-name) 1092 (unidata--ensure-compiled 'unidata-get-name 'unidata-put-name)
1039 (set-char-table-extra-slot table 1 (symbol-function 'unidata-get-name)) 1093 (set-char-table-extra-slot table 1 (symbol-function 'unidata-get-name))
@@ -1070,8 +1124,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
1070 (nreverse l))))) 1124 (nreverse l)))))
1071 1125
1072 1126
1073(defun unidata-gen-table-decomposition (prop &rest ignore) 1127(defun unidata-gen-table-decomposition (prop index &rest ignore)
1074 (let* ((table (unidata-gen-table-word-list prop 'unidata-split-decomposition)) 1128 (let* ((table (unidata-gen-table-word-list prop index 'unidata-split-decomposition))
1075 (word-tables (char-table-extra-slot table 4))) 1129 (word-tables (char-table-extra-slot table 4)))
1076 (unidata--ensure-compiled 'unidata-get-decomposition 1130 (unidata--ensure-compiled 'unidata-get-decomposition
1077 'unidata-put-decomposition) 1131 'unidata-put-decomposition)
@@ -1084,6 +1138,50 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
1084 1138
1085 1139
1086 1140
1141
1142(defvar unidata-gen-table-special-casing--cache nil
1143 "Cached value for `unidata-gen-table-special-casing' function.")
1144
1145(defun unidata-gen-table-special-casing--do-load ()
1146 (let (result)
1147 (with-temp-buffer
1148 (insert-file-contents (expand-file-name "SpecialCasing.txt" unidata-dir))
1149 (goto-char (point-min))
1150 (while (not (eobp))
1151 ;; Ignore empty lines and comments.
1152 (unless (or (eq (char-after) ?\n) (eq (char-after) ?#))
1153 (let ((line (split-string
1154 (buffer-substring (point) (progn (end-of-line) (point)))
1155 ";" "")))
1156 ;; Ignore entries with conditions, i.e. those with six values.
1157 (when (= (length line) 5)
1158 (let ((ch (string-to-number (pop line) 16)))
1159 (setcdr (cddr line) nil) ; strip comment
1160 (push
1161 (cons ch
1162 (mapcar (lambda (entry)
1163 (mapcar (lambda (n) (string-to-number n 16))
1164 (split-string entry)))
1165 line))
1166 result)))))
1167 (forward-line)))
1168 result))
1169
1170(defun unidata-gen-table-special-casing (prop prop-idx &rest ignore)
1171 (let ((table (make-char-table 'char-code-property-table)))
1172 (set-char-table-extra-slot table 0 prop)
1173 (mapc (lambda (entry)
1174 (let ((ch (car entry)) (v (nth prop-idx (cdr entry))))
1175 ;; If character maps to a single character, the mapping is already
1176 ;; covered by regular casing property. Don’t store those.
1177 (when (/= (length v) 1)
1178 (set-char-table-range table ch (apply 'string v)))))
1179 (or unidata-gen-table-special-casing--cache
1180 (setq unidata-gen-table-special-casing--cache
1181 (unidata-gen-table-special-casing--do-load))))
1182 table))
1183
1184
1087(defun unidata-describe-general-category (val) 1185(defun unidata-describe-general-category (val)
1088 (cdr (assq val 1186 (cdr (assq val
1089 '((nil . "Uknown") 1187 '((nil . "Uknown")
@@ -1241,137 +1339,142 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
1241;; (unidata-check)) 1339;; (unidata-check))
1242 1340
1243(defun unidata-check () 1341(defun unidata-check ()
1244 (dolist (elt unidata-prop-alist) 1342 (dolist (elt unidata-file-alist)
1245 (let* ((prop (car elt)) 1343 (dolist (proplist (cdr elt))
1246 (index (unidata-prop-index prop)) 1344 (let* ((prop (unidata-prop-prop proplist))
1247 (generator (unidata-prop-generator prop)) 1345 (index (unidata-prop-index proplist))
1248 (default-value (unidata-prop-default prop)) 1346 (generator (unidata-prop-generator proplist))
1249 (val-list (unidata-prop-val-list prop)) 1347 (default-value (unidata-prop-default proplist))
1250 (table (progn 1348 (val-list (unidata-prop-val-list proplist))
1251 (message "Generating %S table..." prop) 1349 (check #x400)
1252 (funcall generator prop default-value val-list))) 1350 table decoder alist)
1253 (decoder (char-table-extra-slot table 1)) 1351 ;; We compare values in unidata.txt with the ones returned by various
1254 (alist (and (functionp index) 1352 ;; generator functions. However, SpecialCasing.txt is read directly by
1255 (funcall index))) 1353 ;; unidata-gen-table-special-casing--do-load and there is no other file
1256 (check #x400)) 1354 ;; to compare those values with. This is why we’re skipping the check
1257 (dolist (e unidata-list) 1355 ;; for special casing properties.
1258 (let* ((char (car e)) 1356 (unless (eq generator 'unidata-gen-table-special-casing)
1259 (val1 1357 (setq table (progn
1260 (if alist (nth 1 (assoc char alist)) 1358 (message "Generating %S table..." prop)
1261 (nth index e))) 1359 (funcall generator prop index default-value val-list))
1262 val2) 1360 decoder (char-table-extra-slot table 1))
1263 (if (and (stringp val1) (= (length val1) 0)) 1361 (unless (integerp decoder)
1264 (setq val1 nil)) 1362 (setq alist (and (functionp index) (funcall index)))
1265 (unless (or (consp char) 1363 (dolist (e unidata-list)
1266 (integerp decoder)) 1364 (let ((char (car e)) val1 val2)
1267 (setq val2 1365 (unless (consp char)
1268 (cond ((functionp decoder) 1366 (setq val1 (if alist
1269 (funcall decoder char (aref table char) table)) 1367 (nth 1 (assoc char alist))
1270 (t ; must be nil 1368 (nth index e)))
1271 (aref table char)))) 1369 (and (stringp val1)
1272 (if val1 1370 (= (length val1) 0)
1273 (cond ((eq generator 'unidata-gen-table-symbol) 1371 (setq val1 nil))
1274 (setq val1 (intern val1))) 1372 (if val1
1275 ((eq generator 'unidata-gen-table-integer) 1373 (cond ((eq generator 'unidata-gen-table-symbol)
1276 (setq val1 (string-to-number val1))) 1374 (setq val1 (intern val1)))
1277 ((eq generator 'unidata-gen-table-character) 1375 ((eq generator 'unidata-gen-table-integer)
1278 (setq val1 (string-to-number val1 16))) 1376 (setq val1 (string-to-number val1)))
1279 ((eq generator 'unidata-gen-table-decomposition) 1377 ((eq generator 'unidata-gen-table-character)
1280 (setq val1 (unidata-split-decomposition val1)))) 1378 (setq val1 (string-to-number val1 16)))
1281 (cond ((eq prop 'decomposition) 1379 ((eq generator 'unidata-gen-table-decomposition)
1282 (setq val1 (list char))) 1380 (setq val1 (unidata-split-decomposition val1))))
1283 ((eq prop 'bracket-type) 1381 (cond ((eq prop 'decomposition)
1284 (setq val1 'n)))) 1382 (setq val1 (list char)))
1285 (when (>= char check) 1383 ((eq prop 'bracket-type)
1286 (message "%S %04X" prop check) 1384 (setq val1 'n))))
1287 (setq check (+ check #x400))) 1385 (setq val2 (aref table char))
1288 (or (equal val1 val2) 1386 (when decoder
1289 ;; <control> characters get a 'name' property of nil 1387 (setq val2 (funcall decoder char val2 table)))
1290 (and (eq prop 'name) (string= val1 "<control>") (null val2)) 1388 (when (>= char check)
1291 (insert (format "> %04X %S\n< %04X %S\n" 1389 (message "%S %04X" prop check)
1292 char val1 char val2))) 1390 (setq check (+ check #x400)))
1293 (sit-for 0))))))) 1391 (or (equal val1 val2)
1294 1392 ;; <control> characters get a 'name' property of nil
1295;; The entry function. It generates files described in the header 1393 (and (eq prop 'name)
1394 (string= val1 "<control>")
1395 (null val2))
1396 (insert (format "> %04X %S\n< %04X %S\n"
1397 char val1 char val2)))
1398 (sit-for 0))))))))))
1399
1400;; The entry functions. They generate files described in the header
1296;; comment of this file. 1401;; comment of this file.
1297 1402
1298;; Write files (charprop.el, uni-*.el) to dest-dir (default PWD), 1403(defun unidata-gen-file (&optional file data-dir unidata-text-file)
1299;; using as input files from data-dir, and 1404 "Generate lisp file FILE from Unicode data."
1300;; unidata-text-file (default "unidata.txt" in PWD). 1405 (or file
1301(defun unidata-gen-files (&optional data-dir dest-dir unidata-text-file) 1406 (setq file (pop command-line-args-left)
1302 (or data-dir 1407 data-dir (or (pop command-line-args-left) default-directory)
1303 (setq data-dir (pop command-line-args-left)
1304 dest-dir (or (pop command-line-args-left) default-directory)
1305 unidata-text-file (or (pop command-line-args-left) 1408 unidata-text-file (or (pop command-line-args-left)
1306 (expand-file-name "unidata.txt")))) 1409 (expand-file-name "unidata.txt"))))
1307 (let ((coding-system-for-write 'utf-8-unix) 1410 (let* ((coding-system-for-write 'utf-8-unix)
1308 (coding-system-for-read 'utf-8) 1411 (coding-system-for-read 'utf-8)
1309 (charprop-file (expand-file-name "charprop.el" dest-dir)) 1412 (unidata-dir data-dir)
1310 (unidata-dir data-dir)) 1413 (copyright (with-temp-buffer
1311 (dolist (elt unidata-prop-alist) 1414 (insert-file-contents
1312 (let* ((prop (car elt)) 1415 (expand-file-name "copyright.html" unidata-dir))
1313 (file (expand-file-name (unidata-prop-file prop) dest-dir))) 1416 (re-search-forward "^Copyright .*Unicode, Inc.")
1314 (if (file-exists-p file) 1417 (match-string 0))))
1315 (delete-file file)))) 1418 (or unidata-list (unidata-setup-list unidata-text-file))
1316 (unidata-setup-list unidata-text-file) 1419 (let* ((basename (file-name-nondirectory file))
1317 (with-temp-file charprop-file 1420 (elt (assoc basename unidata-file-alist)))
1318 (insert ";; Automatically generated by unidata-gen.el.\n") 1421 (or elt (user-error "Unknown output file: %s" basename))
1319 (dolist (elt unidata-prop-alist) 1422 (or noninteractive (message "Generating %s..." file))
1320 (let* ((prop (car elt)) 1423 (with-temp-file file
1321 (generator (unidata-prop-generator prop)) 1424 (insert ";; " copyright "
1322 (file (expand-file-name (unidata-prop-file prop) dest-dir)) 1425;; Generated from Unicode data files by unidata-gen.el.
1323 (basename (file-name-nondirectory file)) 1426;; The sources for this file are found in the admin/unidata/ directory in
1324 (docstring (unidata-prop-docstring prop)) 1427;; the Emacs sources. The Unicode data files are used under the
1325 (describer (unidata-prop-describer prop)) 1428;; Unicode Terms of Use, as contained in the file copyright.html in that
1326 (default-value (unidata-prop-default prop)) 1429;; same directory.\n")
1327 (val-list (unidata-prop-val-list prop)) 1430 (dolist (proplist (cdr elt))
1328 ;; Avoid creating backup files for those uni-*.el files 1431 (let ((prop (unidata-prop-prop proplist))
1329 ;; that hold more than one table. 1432 (index (unidata-prop-index proplist))
1330 (backup-inhibited t) 1433 (generator (unidata-prop-generator proplist))
1331 table) 1434 (docstring (unidata-prop-docstring proplist))
1332 ;; Filename in this comment line is extracted by sed in 1435 (describer (unidata-prop-describer proplist))
1333 ;; Makefile. 1436 (default-value (unidata-prop-default proplist))
1334 (insert (format ";; FILE: %s\n" basename)) 1437 (val-list (unidata-prop-val-list proplist))
1335 (insert (format "(define-char-code-property '%S %S\n %S)\n" 1438 table)
1336 prop basename docstring)) 1439 (setq table (funcall generator prop index default-value val-list))
1337 (with-temp-buffer 1440 (when describer
1338 (or noninteractive (message "Generating %s..." file)) 1441 (unless (subrp (symbol-function describer))
1339 (when (file-exists-p file) 1442 (unidata--ensure-compiled describer)
1340 (insert-file-contents file) 1443 (setq describer (symbol-function describer)))
1341 (goto-char (point-max)) 1444 (set-char-table-extra-slot table 3 describer))
1342 (search-backward ";; Local Variables:")) 1445 (insert (format "(define-char-code-property '%S\n %S\n %S)\n"
1343 (setq table (funcall generator prop default-value val-list)) 1446 prop table docstring))))
1344 (when describer 1447 (insert ";; Local Variables:\n"
1345 (unless (subrp (symbol-function describer)) 1448 ";; coding: utf-8\n"
1346 (unidata--ensure-compiled describer) 1449 ";; version-control: never\n"
1347 (setq describer (symbol-function describer))) 1450 ";; no-byte-compile: t\n"
1348 (set-char-table-extra-slot table 3 describer)) 1451 ";; no-update-autoloads: t\n"
1349 (if (bobp) 1452 ";; End:\n\n"
1350 (insert ";; Copyright (C) 1991-2014 Unicode, Inc. 1453 (format ";; %s ends here\n" basename)))))
1351;; This file was generated from the Unicode data files at 1454 (or noninteractive (message "Generating %s...done" file)))
1352;; http://www.unicode.org/Public/UNIDATA/. 1455
1353;; See lisp/international/README for the copyright and permission notice.\n")) 1456(defun unidata-gen-charprop (&optional charprop-file)
1354 (insert (format "(define-char-code-property '%S\n %S\n %S)\n" 1457 (or charprop-file (setq charprop-file (pop command-line-args-left)))
1355 prop table docstring)) 1458 (with-temp-file charprop-file
1356 (if (eobp) 1459 (insert ";; Automatically generated by unidata-gen.el.\n"
1357 (insert ";; Local Variables:\n" 1460 ";; See the admin/unidata/ directory in the Emacs sources.\n")
1358 ";; coding: utf-8\n" 1461 (dolist (elt unidata-file-alist)
1359 ";; version-control: never\n" 1462 (dolist (proplist (cdr elt))
1360 ";; no-byte-compile: t\n" 1463 (insert (format "(define-char-code-property '%S %S\n %S)\n"
1361 ";; no-update-autoloads: t\n" 1464 (unidata-prop-prop proplist) (car elt)
1362 ";; End:\n\n" 1465 (unidata-prop-docstring proplist)))))
1363 (format ";; %s ends here\n" basename))) 1466 (or noninteractive (message "Writing %s..." charprop-file))
1364 (write-file file) 1467 (insert "\n"
1365 (or noninteractive (message "Generating %s...done" file))))) 1468 "(provide 'charprop)\n"
1366 (message "Writing %s..." charprop-file) 1469 " \n"
1367 (insert ";; Local Variables:\n" 1470 ";; Local Variables:\n"
1368 ";; coding: utf-8\n" 1471 ";; coding: utf-8\n"
1369 ";; version-control: never\n" 1472 ";; version-control: never\n"
1370 ";; no-byte-compile: t\n" 1473 ";; no-byte-compile: t\n"
1371 ";; no-update-autoloads: t\n" 1474 ";; no-update-autoloads: t\n"
1372 ";; End:\n\n" 1475 ";; End:\n\n"
1373 (format ";; %s ends here\n" 1476 (format ";; %s ends here\n"
1374 (file-name-nondirectory charprop-file)))))) 1477 (file-name-nondirectory charprop-file)))))
1375 1478
1376 1479
1377 1480
diff --git a/admin/update_autogen b/admin/update_autogen
index 898432eae60..ba4ed00fa39 100755
--- a/admin/update_autogen
+++ b/admin/update_autogen
@@ -47,14 +47,7 @@ cd $PD
47cd ../ 47cd ../
48[ -d admin ] || die "Could not locate admin directory" 48[ -d admin ] || die "Could not locate admin directory"
49 49
50if [ -d .bzr ]; then 50[ -d .git ] || die "No .git directory"
51 vcs=bzr
52elif [ -e .git ]; then
53 vcs=git
54else
55 die "Cannot determine vcs"
56fi
57
58 51
59usage () 52usage ()
60{ 53{
@@ -157,10 +150,7 @@ OPTIND=1
157## Run status on inputs, list modified files on stdout. 150## Run status on inputs, list modified files on stdout.
158status () 151status ()
159{ 152{
160 local statflag="-S" 153 git status -s "$@" >| $tempfile || die "git status error for $@"
161 [ "$vcs" = "git" ] && statflag="-s"
162
163 $vcs status $statflag "$@" >| $tempfile || die "$vcs status error for $@"
164 154
165 local stat file modified 155 local stat file modified
166 156
@@ -234,11 +224,11 @@ commit ()
234 224
235 echo "Committing..." 225 echo "Committing..."
236 226
237 $vcs commit -m "; Auto-commit of $type files." "$@" || return $? 227 git commit -m "; Auto-commit of $type files." "$@" || return $?
238 228
239 [ "$vcs" = "git" ] && { 229 ## In case someone else pushed something while we were working.
240 $vcs push || return $? 230 git pull --rebase || return $?
241 } 231 git push || return $?
242 232
243 echo "Committed files: $@" 233 echo "Committed files: $@"
244} # function commit 234} # function commit