Compare commits

..

4 commits

Author SHA1 Message Date
Michael Albinus
dec958258b Adapt Tramp versions. Do not merge
* doc/misc/trampver.texi:
* lisp/net/trampver.el (tramp-version)
(customize-package-emacs-version-alist): Adapt Tramp versions.
2023-02-24 19:42:27 +01:00
Stefan Kangas
3c9701938d ; Disable failing test
* test/lisp/emacs-lisp/copyright-tests.el (test-correct-notice):
Disable test.  Do not merge.
2023-02-19 17:56:27 +01:00
Stefan Kangas
91d6ef2dcb ; Update some copyright years to 2023 by hand
Do not merge.
2023-02-19 17:47:35 +01:00
Stefan Kangas
8a9e5767d8 Update copyright year to 2023
Run "TZ=UTC0 admin/update-copyright".

Do not merge.
2023-02-19 17:47:29 +01:00
2750 changed files with 152150 additions and 558720 deletions

View file

@ -1,20 +1,12 @@
Language: Cpp
BasedOnStyle: GNU
AlignEscapedNewlinesLeft: true
AlignOperands: Align
AlwaysBreakAfterReturnType: TopLevelDefinitions
BreakBeforeBinaryOperators: All
BreakBeforeBraces: GNU
ColumnLimit: 70
ContinuationIndentWidth: 2
IndentPPDirectives: AfterHash
PPIndentWidth: 1
ForEachMacros:
- FOR_EACH_TAIL
- FOR_EACH_TAIL_SAFE
- FOR_EACH_LIVE_BUFFER
- ITREE_FOREACH
- FOR_EACH_ALIST_VALUE
ForEachMacros: [FOR_EACH_TAIL, FOR_EACH_TAIL_SAFE]
IncludeCategories:
- Regex: '^<config\.h>$'
Priority: -1
@ -24,17 +16,11 @@ IncludeCategories:
Priority: 2
- Regex: '.*'
Priority: 3
WhitespaceSensitiveMacros:
- STR
- CALL1I
- CALL2I
- STR_VALUE
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
PenaltyBreakBeforeFirstCallParameter: 2000
SpaceAfterCStyleCast: true
SpaceBeforeParens: Always
UseTab: Always
# Local Variables:
# mode: yaml

View file

@ -1,18 +1,12 @@
;;; Directory Local Variables -*- no-byte-compile: t; -*-
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((nil . ((tab-width . 8)
(sentence-end-double-space . t)
(fill-column . 70)
(emacs-lisp-docstring-fill-column . 65)
(vc-git-annotate-switches . "-w")
(bug-reference-url-format . "https://debbugs.gnu.org/%s")
(diff-add-log-use-relative-names . t)
(vc-prepare-patches-separately . nil)))
(bug-reference-url-format . "https://debbugs.gnu.org/%s")))
(c-mode . ((c-file-style . "GNU")
(c-noise-macro-names . ("INLINE" "NO_INLINE" "ATTRIBUTE_NO_SANITIZE_UNDEFINED"
"UNINIT" "CALLBACK" "ALIGN_STACK" "ATTRIBUTE_MALLOC"
"ATTRIBUTE_DEALLOC_FREE"))
(c-noise-macro-names . ("INLINE" "ATTRIBUTE_NO_SANITIZE_UNDEFINED" "UNINIT" "CALLBACK" "ALIGN_STACK"))
(electric-quote-comment . nil)
(electric-quote-string . nil)
(indent-tabs-mode . t)
@ -21,12 +15,8 @@
(electric-quote-comment . nil)
(electric-quote-string . nil)
(mode . bug-reference-prog)))
(c-ts-mode . ((c-ts-mode-indent-style . gnu)
(indent-tabs-mode . t)
(mode . bug-reference-prog)))
(log-edit-mode . ((log-edit-font-lock-gnu-style . t)
(log-edit-setup-add-author . t)
(vc-git-log-edit-summary-target-len . 50)))
(log-edit-setup-add-author . t)))
(change-log-mode . ((add-log-time-zone-rule . t)
(fill-column . 74)
(mode . bug-reference)))
@ -35,7 +25,6 @@
(electric-quote-comment . nil)
(electric-quote-string . nil)
(mode . bug-reference-prog)))
(lisp-data-mode . ((indent-tabs-mode . nil)))
(texinfo-mode . ((electric-quote-comment . nil)
(electric-quote-string . nil)
(mode . bug-reference-prog)))

25
.gitignore vendored
View file

@ -25,7 +25,6 @@
# Personal customization.
.dir-locals-2.el
.no-advice-on-failure
# Built by 'autogen.sh'.
/aclocal.m4
@ -54,7 +53,6 @@ src/emacs-module.h
# C-level sources built by 'make'.
lib/alloca.h
lib/assert.h
lib/byteswap.h
lib/dirent.h
lib/errno.h
@ -158,11 +156,9 @@ test/manual/etags/srclist
test/manual/etags/regexfile
test/manual/etags/ETAGS
test/manual/etags/CTAGS
test/manual/etags/CTAGS*.sorted
test/manual/indent/*.new
test/lisp/gnus/mml-sec-resources/random_seed
test/lisp/play/fortune-resources/fortunes.dat
test/**/*.xml
# ctags, etags.
TAGS
@ -186,7 +182,6 @@ ID
# Executables.
*.exe
a.out
lib-src/be-resources
lib-src/blessmail
lib-src/ctags
lib-src/ebrowse
@ -208,7 +203,6 @@ nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist
src/bootstrap-emacs
src/emacs
src/emacs-[0-9]*
src/Emacs
src/temacs
src/dmpstruct.h
src/*.pdmp
@ -221,10 +215,8 @@ lisp/international/charprop.el
lisp/international/charscript.el
lisp/international/cp51932.el
lisp/international/emoji-zwj.el
lisp/international/emoji-labels.el
lisp/international/eucjp-ms.el
lisp/international/uni-*.el
lisp/international/idna-mapping.el
lisp/language/pinyin.el
# Documentation.
@ -321,20 +313,3 @@ lib-src/seccomp-filter.bpf
lib-src/seccomp-filter.pfc
lib-src/seccomp-filter-exec.bpf
lib-src/seccomp-filter-exec.pfc
# gsettings schema
/etc/*.gschema.valid
# Ignore directory made by admin/make-manuals.
/manual/
# Ignore Finder files on MacOS.
.DS_Store
# Ignore a directory used by dap-mode.
.vscode
/test/gmp.h
# GDB history
.gdb_history
_gdb_history

View file

@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
# GNU Emacs support for the GitLab protocol for CI.
# GNU Emacs support for the GitLab protocol for CI
# The presence of this file does not imply any FSF/GNU endorsement of
# any particular service that uses that protocol. Also, it is intended for

View file

@ -30,8 +30,6 @@ Artur Malabarba <bruce.connor.am@gmail.com> <am12548@it055607.users.bris.ac.uk>
Bastien Guerry <bzg@gnu.org>
Bastien Guerry <bzg@gnu.org> <bastien1@free.fr>
Bastien Guerry <bzg@gnu.org> <bzg@altern.org>
Benjamin Schwerdtner <Benjamin.Schwerdtner@gmail.com>
Bob Rogers <rogers@rgrjr.com> <rogers-emacs@rgrjr.homedns.org>
Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> <oitofelix@gmail.com>
Carlos Pita <carlosjosepita@gmail.com>
Chong Yidong <cyd@gnu.org> <cyd@stupidchicken.com>
@ -79,9 +77,6 @@ Ian Dunn <dunni@gnu.org>
Jan Djärv <jan.h.d@swipnet.se>
Jan Djärv <jan.h.d@swipnet.se> <jhd@f20.localdomain>
Jason Rumney <jasonr@gnu.org> <jasonr@wanchan>
Jeff Walsh <fejfighter@gmail.com> <jawalsh@localhost.localdomain>
Jeff Walsh <fejfighter@gmail.com> <jeff.walsh@drtusers-MacBook-Pro.local>
Jeff Walsh <fejfighter@gmail.com> <jewalsh@redhat.com>
Jens Lechtenbörger <jens.lechtenboerger@fsfe.org>
Jim Blandy <jimb@red-bean.com> <jimb@redhat.com>
Jimmy Aguilar Mena <spacibba@aol.com>
@ -105,14 +100,12 @@ Kenichi Handa <handa@gnu.org>
Kenichi Handa <handa@gnu.org> <handa@etlken>
Kenichi Handa <handa@gnu.org> <handa@m17n.org>
Kenjiro Nakayama <nakayamakenjiro@gmail.com>
Kjartan Óli Ágústsson <kjartanoli@outlook.com>
Károly Lőrentey <lorentey@elte.hu>
Lars Ingebrigtsen <larsi@gnus.org>
Lars Ingebrigtsen <larsi@gnus.org> <larsi@emkay.local>
Lars Ingebrigtsen <larsi@gnus.org> <larsi@openbsd6.gnus.org>
Lars Ingebrigtsen <larsi@gnus.org> <larsi@quimbies.gnus.org>
Lars Ingebrigtsen <larsi@gnus.org> <larsi@stories.gnus.org>
Laurence Warne <laurencewarne@gmail.com>
Lin Sun <lin.sun@zoom.us>
Ludovic Courtès <ludo@gnu.org>
Luke Lee <luke.yx.lee@gmail.com>
@ -126,7 +119,6 @@ Maxim Nikulin <manikulin@gmail.com>
Michael Albinus <michael.albinus@gmx.de> <albinus@detlef>
Michalis V <mvar.40k@gmail.com>
Miha Rihtaršič <miha@kamnitnik.top>
Morgan J. Smith <Morgan.J.Smith@outlook.com>
Nick Drozd <nicholasdrozd@gmail.com>
Nicolas Petton <nicolas@petton.fr> <petton.nicolas@gmail.com>
Nitish Chandra <nitishchandrachinta@gmail.com>
@ -141,7 +133,6 @@ Peter Oliver <p.d.oliver@mavit.org.uk> <bzr@mavit.org.uk>
Peter Oliver <p.d.oliver@mavit.org.uk> <git@mavit.org.uk>
Philip Kaludercic <philipk@posteo.net>
Philip Kaludercic <philipk@posteo.net> <philip.kaludercic@fau.de>
Philip Kaludercic <philipk@posteo.net> <philip@icterid>
Philip Kaludercic <philipk@posteo.net> <philip@warpmail.net>
Philipp Stephani <phst@google.com>
Philipp Stephani <phst@google.com> Philipp Stephani <p.stephani2@gmail.com>
@ -149,7 +140,6 @@ Phillip Lord <phillip.lord@russet.org.uk> <phillip.lord@newcastle.ac.uk>
Pierre Lorenzon <devel@pollock-nageoire.net>
Pieter van Oostrum <pieter@vanoostrum.org> <pieter-l@vanoostrum.org>
Pip Cet <pipcet@gmail.com>
Po Lu <luangruo@yahoo.com>
Po Lu <luangruo@yahoo.com> Po Lu via <emacs-devel@gnu.org>
Przemysław Wojnowski <esperanto@cumego.com>
Rasmus <rasmus@gmx.us>
@ -159,10 +149,8 @@ Robert Weiner <rsw@gnu.org> <rswgnu@gmail.com>
Roland Winkler <winkler@gnu.org> <Roland.Winkler@physik.uni-erlangen.de>
Ronnie Schnell <ronnie@driver-aces.com>
Ryan C. Thompson <rct@thompsonclan.org>
Sam Steingold <sds@gnu.org> <sdsg@amazon.com>
Simen Heggestøyl <simenheg@runbox.com>
Simen Heggestøyl <simenheg@runbox.com> <simenheg@ifi.uio.no>
Simen Heggestøyl <simenheg@runbox.com> <simenheg@gmail.com>
Simen Heggestøyl <simenheg@gmail.com>
Simen Heggestøyl <simenheg@gmail.com> <simenheg@ifi.uio.no>
Simon Josefsson <simon@josefsson.org> <jas@extundo.com>
Stefan Kangas <stefankangas@gmail.com> <stefan@marxist.se>
Stefan Monnier <monnier@iro.umontreal.ca> <monnier@IRO.UMontreal.CA>
@ -184,13 +172,10 @@ Ulf Jasper <ulf.jasper@web.de> Ulf Jasper <>
Ulf Jasper <ulf.jasper@web.de> Ulf Jasper <ulf@uthinkpad>
Ulrich Müller <ulm@gentoo.org>
Vinicius Jose Latorre <viniciusjl@ig.com.br> <viniciusjl.gnu@gmail.com>
Vladimir Nikishkin <lockywolf@gmail.com> <for.emacs-table.el-environment-patch_2022-05-09@lockywolf.net>
Werner Lemberg <wl@gnu.org>
Wolfgang Scherer <wolfgang.scherer@gmx.de> <Wolfgang.Scherer@gmx.de>
Xi Lu <lx@shellcodes.org>
Xue Fuqiao <xfq.free@gmail.com> <xfq@gnu.org>
Yilkal Argaw <yilkalargawworkneh@gmail.com>
Yuuki Harano <masm+github@masm11.me> <masm@masm11.ddo.jp>
Óscar Fuentes <ofv@wanadoo.es>
İ. Göktuğ Kayaalp <self@gkayaalp.com>
Łukasz Stelmach <stlman@poczta.fm> <l.stelmach@samsung.com>

View file

@ -1,6 +1,3 @@
Copyright (C) 2006-2023 Free Software Foundation, Inc.
See the end of the file for license conditions.
* How developers contribute to GNU Emacs
Here is how software developers can contribute to Emacs. (Non-developers: see
@ -18,7 +15,7 @@ To configure Git for Emacs development, you can run the following:
The following shell commands then build and run Emacs from scratch:
git clone https://git.savannah.gnu.org/git/emacs.git
git clone git://git.sv.gnu.org/emacs.git
cd emacs
./autogen.sh
./configure
@ -110,7 +107,7 @@ admin/notes/bug-triage.
Any change that matters to end-users should have an entry in etc/NEWS.
Try to start each NEWS entry with a sentence that summarizes the entry
and takes just one line -- this will allow reading NEWS in Outline
and takes just one line -- this will allow to read NEWS in Outline
mode after hiding the body of each entry.
Doc-strings should be updated together with the code.
@ -123,7 +120,7 @@ Think about whether your change requires updating the manuals. If you
know it does not, mark the NEWS entry with "---". If you know
that *all* the necessary documentation updates have been made as part
of your changes or those by others, mark the entry with "+++".
Otherwise, do not mark it.
Otherwise do not mark it.
If your change requires updating the manuals to document new
functions/commands/variables/faces, then use the proper Texinfo
@ -205,10 +202,9 @@ them right the first time, so here are guidelines for formatting them:
you can put a paragraph (after the empty line and before the
individual ChangeLog entries) that further describes the commit.
- Lines in ChangeLog entries should preferably be not longer than 63
characters, and must not exceed 78 characters, unless they consist
of a single word of at most 140 characters; this 78/140 limit is
enforced by a commit hook.
- Limit lines in commit messages to 78 characters, unless they consist
of a single word of at most 140 characters; this is enforced by a
commit hook.
- If only a single file is changed, the summary line can be the normal
file first line (starting with the asterisk). Then there is no
@ -318,45 +314,11 @@ them right the first time, so here are guidelines for formatting them:
with Emacs commands like 'C-x 4 a', and commit the change using the
shell command 'vc-dwim --commit'. Type 'vc-dwim --help' for more.
** Committing your changes.
When you commit changes, Git invokes several scripts that test the
commit for validity, and may abort the commit if some of the tests
fail. These scripts live in the '.git/hooks/' subdirectory of the
top-level directory of the repository, and they perform the following
tests:
- commit log message must not be empty;
- the first line of the commit log message doesn't start with
whitespace characters;
- the second line of the commit log message must be empty;
- commit log message should include only valid printable ASCII and
UTF-8 characters;
- commit log message lines must be shorter than 79 characters, unless
a line consists of a single long word, in which case that word can
be up to 140 characters long;
- there shouldn't be any "Signed-off-by:" tags in the commit log
message, and "git commit" should not be invoked with the '-s' option
(which automatically adds "Signed-off-by:");
- if the commit adds new files, the file names must not begin with
'-' and must consist of ASCII letters, digits, and characters of the
set [-+./_];
- the changes don't include unresolved merge conflict markers;
- the changes don't introduce whitespace errors: trailing whitespace,
lines that include nothing but whitespace characters, and indented
lines where a SPC character is immediately followed by a TAB in the
line's initial indentation
** Committing changes by others
If committing changes written by someone else, commit in their name,
not yours. You can use 'git commit --author="AUTHOR"' to specify a
change's author. When using Emacs VC to commit, the author can be
specified in the log-edit buffer by adding an "Author: AUTHOR" header
line (set 'log-edit-setup-add-author' non-nil to have this header line
added automatically). Note that the validity checks described in the
previous section are still applied, so you will have to correct any
problems they uncover in the changes submitted by others.
change's author.
** Branches
@ -400,26 +362,10 @@ the commit to master, by starting the commit message with "Backport:".
The gitmerge function excludes these commits from the merge to the master.
Some changes should not be merged to master at all, for whatever
reason. These should be marked by including something like "Do not
reasons. These should be marked by including something like "Do not
merge to master" or anything that matches gitmerge-skip-regexp (see
admin/gitmerge.el) in the commit message.
** Some packages in Emacs are maintained externally
Sometimes a package that ships as part of GNU Emacs is maintained as a
separate project, with its own upstream repository, its own maintainer
group, its own development conventions, etc. The upstream project's
code is periodically merged into Emacs (exactly when and how such
merges happen depends on the package).
So when you are making a contribution -- such as fixing a bug or
proposing an enhancement -- to one of these externally maintained
packages, you sometimes need to deal with that package at its upstream
source.
In the section "Externally maintained packages" in "admin/MAINTAINERS"
we maintain a list of such packages.
** GNU ELPA
This repository does not contain the Emacs Lisp package archive
@ -449,8 +395,8 @@ files intended for use only with Emacs version 24.5 and later.
*** Useful files in the admin/ directory
See all the files in 'admin/notes/*'. In particular, see
'admin/notes/newfile' and 'admin/notes/repo'.
See all the files in admin/notes/* . In particular, see
admin/notes/newfile, see admin/notes/repo.
The file admin/MAINTAINERS records the areas of interest of frequent
Emacs contributors. If you are making changes in one of the files

View file

@ -930,7 +930,7 @@
(mostlyclean_dirs, clean_dirs, distclean_dirs, maintainer_clean_dirs):
New variables.
(mostlyclean, clean, distclean, bootstrap-clean, maintainer-clean)
(extraclean): Define using each subdirectory as a prerequisite.
(extraclean): Define using each subdirectory as a prequisite.
* lib/Makefile.am (bootstrap-clean): New.
2014-06-15 Paul Eggert <eggert@cs.ucla.edu>
@ -4302,7 +4302,7 @@
(install-arch-indep): Don't install-etc for self-contained ns builds.
* configure.in (GCC_TEST_OPTIONS, NON_GCC_TEST_OPTIONS) <darwin>:
No longer unconditionally add /sw directories. (Bug#2280)
No longer unconditonally add /sw directories. (Bug#2280)
* Makefile.in (install-arch-dep): Depend on install-arch-indep.
(install-arch-indep): Depend on install-leim.
@ -5685,7 +5685,7 @@
(__mktime_internal): Use it systematically for all isdst comparisons.
This completes the fix for libc BZ #6723, and removes the need for
normalizing tm_isdst.
See <https://sourceware.org/bugzilla/show_bug.cgi?id=6723>
See <http://sourceware.org/bugzilla/show_bug.cgi?id=6723>
(not_equal_tm) [DEBUG]: Use isdst_differ here, too.
mktime: fix some integer overflow issues and sidestep the rest

View file

@ -111,7 +111,7 @@
2017-03-21 Noam Postavsky <npostavs@gmail.com>
Narrow scope of modification hook re-enabling in org-src fontification
Narrow scope of modification hook renabling in org-src fontification
Modification hooks should be enabled while modifying text in the
org-src temp buffer, but in 2017-01-29 "Call modification hooks in
@ -9317,7 +9317,7 @@
optional.
* src/buffer.c (Fbarf_if_buffer_read_only): Rename argument POS
to POSITION to keep consistent with doc-string.
to POSITION to keep consisteny with doc-string.
2016-02-01 Paul Eggert <eggert@cs.ucla.edu>
@ -11843,7 +11843,7 @@
2016-01-05 Alan Mackenzie <acm@muc.de>
Make C++ buffers writable when writing their initial text properties.
Make C++ buffers writeable when writing their initial text properties.
This is a correction to yesterday's CC Mode patch.
@ -23054,8 +23054,8 @@
Fix tests in file-notify-tests.el
* test/automated/file-notify-tests.el: Remove Tramp declarations.
(file-notify-test00-availability): Print remote command without
Tramp internal functions.
(file-notify-test00-availability): Print remote command w/o Tramp
internal functions.
(file-notify-test02-events, file-notify-test02-events-remote):
Adapt docstring.
(file-notify-test03-autorevert): Use `format-message' when
@ -26343,7 +26343,7 @@
(verilog-type-font-keywords): Cycle delay operators like ##1 and
##[0:$] are now highlighted in their entirety similarly to the #
delay-control operator. Likewise, the followed-by operators #-#
and #=# are no longer partially highlighted.
and #=# are no longer partially highlighed.
(verilog-backward-syntactic-ws-quick)
(verilog-skip-backward-comments): Minor performance improvements
to buffer traversal functions for reduced latency.
@ -28676,7 +28676,7 @@
* lisp/faces.el (set-face-attribute): Don't be fooled too easily
by a hyphen in a font's name.
Fix value of posn-at-point in R2L lines
Fix value of posn-at-pont in R2L lines
* src/keyboard.c (Fposn_at_x_y, Fposn_at_point): Allow X pixel
coordinate of -1, for a newline in a right-to-left line that
overflowed into the left fringe.
@ -34464,7 +34464,7 @@
* lisp/emacs-lisp/package.el: Make archive and status pseudo-keywords
(package--has-keyword-p): Understand "arc:xxxx" and "status:xxxx"
as special keywords which match against package archive and status
as special keywords which match agains package archive and status
respectively.
* etc/NEWS: Document it.

File diff suppressed because it is too large Load diff

114348
ChangeLog.4

File diff suppressed because it is too large Load diff

View file

@ -36,31 +36,31 @@
ifeq (help,$(filter help,$(MAKECMDGOALS)))
help:
$(info $ NOTE: This is a brief summary of some common make targets.)
$(info $ For more detailed information, please read the files INSTALL,)
$(info $ INSTALL.REPO, Makefile or visit this URL:)
$(info $ https://www.gnu.org/prep/standards/html_node/Standard-Targets.html)
$(info $ )
$(info $ make all -- compile and build Emacs)
$(info $ make install -- install Emacs)
$(info $ make TAGS -- update tags tables)
$(info $ make clean -- delete built files but preserve configuration)
$(info $ make mostlyclean -- like 'make clean', but leave those files that)
$(info $ usually do not need to be recompiled)
$(info $ make distclean -- delete all build and configuration files,)
$(info $ leave only files included in source distribution)
$(info $ make maintainer-clean -- delete almost everything that can be regenerated)
$(info $ make extraclean -- like maintainer-clean, and also delete)
$(info $ backup and autosave files)
$(info $ make bootstrap -- delete all compiled files to force a new bootstrap)
$(info $ from a clean slate, then build in the normal way)
$(info $ make uninstall -- remove files installed by 'make install')
$(info $ make check -- run the Emacs test suite)
$(info $ make docs -- generate Emacs documentation in info format)
$(info $ make html -- generate documentation in html format)
$(info $ make ps -- generate documentation in ps format)
$(info $ make pdf -- generate documentation in pdf format )
@:
@echo "NOTE: This is a brief summary of some common make targets."
@echo "For more detailed information, please read the files INSTALL,"
@echo "INSTALL.REPO, Makefile or visit this URL:"
@echo "https://www.gnu.org/prep/standards/html_node/Standard-Targets.html"
@echo ""
@echo "make all -- compile and build Emacs"
@echo "make install -- install Emacs"
@echo "make TAGS -- update tags tables"
@echo "make clean -- delete built files but preserve configuration"
@echo "make mostlyclean -- like 'make clean', but leave those files that"
@echo " usually do not need to be recompiled"
@echo "make distclean -- delete all build and configuration files,"
@echo " leave only files included in source distribution"
@echo "make maintainer-clean -- delete almost everything that can be regenerated"
@echo "make extraclean -- like maintainer-clean, and also delete"
@echo " backup and autosave files"
@echo "make bootstrap -- delete all compiled files to force a new bootstrap"
@echo " from a clean slate, then build in the normal way"
@echo "make uninstall -- remove files installed by 'make install'"
@echo "make check -- run the Emacs test suite"
@echo "make docs -- generate Emacs documentation in info format"
@echo "make html -- generate documentation in html format"
@echo "make ps -- generate documentation in ps format"
@echo "make pdf -- generate documentation in pdf format "
@exit
.PHONY: help
@ -79,7 +79,7 @@ else
ifeq ($(filter-out %clean,$(or $(MAKECMDGOALS),default)),)
$(MAKECMDGOALS):
$(warning No Makefile; skipping $@.)
@echo >&2 'No Makefile; skipping $@.'
else
@ -97,25 +97,20 @@ default $(ORDINARY_GOALS): Makefile
.NOTPARALLEL:
configure:
$(warning There seems to be no "configure" file in this directory.)
$(warning Running ./autogen.sh ...)
@echo >&2 'There seems to be no "configure" file in this directory.'
@echo >&2 Running ./autogen.sh ...
./autogen.sh
@echo >&2 '"configure" file built.'
Makefile: configure
$(warning There seems to be no Makefile in this directory.)
ifeq ($(configure),default)
$(warning Running ./configure ...)
@echo >&2 'There seems to be no Makefile in this directory.'
@echo >&2 'Running ./configure ...'
./configure
else
$(warning Running ./configure $(configure)...)
./configure $(configure)
endif
@echo >&2 'Makefile built.'
# 'make bootstrap' in a fresh checkout needn't run 'configure' twice.
bootstrap: Makefile
$(MAKE) -f Makefile bootstrap-all
$(MAKE) -f Makefile all
.PHONY: bootstrap default $(ORDINARY_GOALS)

52
INSTALL
View file

@ -4,13 +4,11 @@ Inc.
See the end of the file for license conditions.
This file contains general information on building GNU Emacs. For
more information specific to the MS-Windows, GNUstep/macOS, and MS-DOS
ports, also read the files nt/INSTALL, nextstep/INSTALL, and
msdos/INSTALL.
For information about building from a Git checkout (rather than an
Emacs release), read the INSTALL.REPO file first.
This file contains general information on building GNU Emacs.
For more information specific to the MS-Windows, GNUstep/macOS, and
MS-DOS ports, also read the files nt/INSTALL, nextstep/INSTALL, and
msdos/INSTALL. For information about building from a repository checkout
(rather than a release), also read the file INSTALL.REPO.
BASIC INSTALLATION
@ -187,9 +185,8 @@ X11 is being used.
libz (for PNG): https://www.zlib.net/
X libjpeg for JPEG: https://www.ijg.org/
X libtiff for TIFF: http://www.simplesystems.org/libtiff/
X libgif for GIF: https://giflib.sourceforge.net/
X libgif for GIF: http://giflib.sourceforge.net/
librsvg2 for SVG: https://wiki.gnome.org/Projects/LibRsvg
libwebp for WebP: https://developers.google.com/speed/webp/
If you supply the appropriate --without-LIB option, 'configure' will
omit the corresponding library from Emacs, even if that makes for a
@ -228,38 +225,6 @@ e.g. 'emacs25'). On Red Hat-based systems, the corresponding command is
On FreeBSD, the command is 'pkg install -y `pkg rquery %dn emacs-devel`'.
* Alternative window systems
If you want to use Emacs on one of the alternative window systems
available on GNU/Linux and some Unix systems, such as Wayland or
Broadway, you can build the PGTK ("Pure GTK") port of Emacs, which
utilizes the GTK+ toolkit to support those window systems. To this
end, invoke the configure script with the '--with-pgtk' option, like
this:
./configure --with-pgtk
This build is only supported with GTK+ version 3, and it is an error
to specify any other X-specific configuration option when PGTK is
enabled.
If you use exclusively X, do not use the PGTK port. There are a
number of respects in which the regular --with-x-toolkit=gtk build
works better. The PGTK port should not be considered a simple upgrade
from --with-x-toolkit=gtk.
With the PGTK build, you will be able to switch between running Emacs
on X, Wayland and Broadway using the 'GDK_BACKEND' environment
variable. GTK+ should automatically detect and use the correct value
for your system, but you can also specify it manually. For example,
to force GTK+ to run under Broadway, start Emacs like this:
GDK_BACKEND=broadway emacs ...
(where '...' denotes any further options you may want to pass to Emacs).
The GNUstep build also supports the Wayland window system. If that is
what you want, see nextstep/INSTALL.
DETAILED BUILDING AND INSTALLATION:
@ -348,7 +313,6 @@ or more of these options:
--without-gif for GIF image support
--without-png for PNG image support
--without-rsvg for SVG image support
--without-webp for WebP image support
Although ImageMagick support is disabled by default due to security
and stability concerns, you can enable it with --with-imagemagick.
@ -358,10 +322,6 @@ Use --without-toolkit-scroll-bars to disable Motif or Xaw3d scroll bars.
Use --without-xim to inhibit the default use of X Input Methods.
In this case, the X resource useXIM can be used to turn on use of XIM.
Use --without-xinput2 to disable the use of version 2 of the X Input
Extension. This disables support for touchscreens, pinch gestures,
and scroll wheels that report scroll deltas at pixel-level precision.
Use --disable-largefile to omit support for files larger than 2GB, and
--disable-year2038 to omit support for timestamps past the year 2038,
on systems which allow omitting such support. This may help when

View file

@ -4,19 +4,13 @@ The Emacs repository is hosted on Savannah. The following Git command
will clone the repository to the 'emacs' subdirectory of the current
directory on your local machine:
git clone https://git.savannah.gnu.org/git/emacs.git
git clone git://git.sv.gnu.org/emacs.git
To build the repository code, simply run 'make' in the 'emacs'
directory. This should work if your files are freshly checked out
from the repository, and if you have the proper tools installed; the
default configuration options will be used. Other configuration
options can be specified by setting a 'configure' variable, for
example:
$ make configure="--prefix=/opt/emacs CFLAGS='-O0 -g3'"
If the above doesn't work, or if you have special build requirements,
the following information may be helpful.
from the repository, and if you have the proper tools installed. If
it doesn't work, or if you have special build requirements, the
following information may be helpful.
Building Emacs from the source-code repository requires some tools
that are not needed when building from a release. You will need:
@ -64,16 +58,7 @@ To update loaddefs.el (and similar files), do:
If either of the above partial procedures fails, try 'make bootstrap'.
If CPU time is not an issue, 'make bootstrap' is a more thorough way
to rebuild, avoiding spurious problems. 'make bootstrap' rebuilds
Emacs with the same configuration options as the previous build; it
can also be used to rebuild Emacs with other configuration options by
setting a 'configure' variable, for example:
$ make bootstrap configure="CFLAGS='-O0 -g3'"
To rebuild Emacs with the default configuration options, you can use:
$ make bootstrap configure=default
to rebuild, avoiding spurious problems.
Occasionally, there are changes that 'make bootstrap' won't be able to
handle. The most thorough cleaning can be achieved by 'git clean -fdx'

View file

@ -51,15 +51,7 @@
#
# make bootstrap
# Removes all the compiled files to force a new bootstrap from a
# clean slate, and then build in the normal way. If the FAST Make
# variable is set, then the autom4te.cache directory and the
# config.cache file are not removed. This lets you say
#
# ./configure -C
# make FAST=true bootstrap
#
# and use the cached results from the configure run, which is much
# faster though it does not work in general.
# clean slate, and then build in the normal way.
#
# make docs
# Make Emacs documentation files from their sources; requires makeinfo.
@ -110,11 +102,6 @@ HAVE_NATIVE_COMP = @HAVE_NATIVE_COMP@
USE_STARTUP_NOTIFICATION = @USE_STARTUP_NOTIFICATION@
HAVE_BE_APP = @HAVE_BE_APP@
HAVE_PGTK = @HAVE_PGTK@
HAVE_GSETTINGS = @HAVE_GSETTINGS@
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / macOS.
@ -223,9 +210,6 @@ icondir=$(datarootdir)/icons
# The source directory for the icon files.
iconsrcdir=$(srcdir)/etc/images/icons
# Where to install the gsettings schema file.
gsettingsschemadir = $(datadir)/glib-2.0/schemas
# ==================== Emacs-specific directories ====================
# These variables hold the values Emacs will actually use. They are
@ -320,21 +304,15 @@ LN_S_FILEONLY = @LN_S_FILEONLY@
# We use gzip to compress installed .el and some .txt files.
GZIP_PROG = @GZIP_PROG@
GLIB_COMPILE_SCHEMAS = glib-compile-schemas
# ============================= Targets ==============================
# Program name transformation.
TRANSFORM = @program_transform_name@
# Prevent any settings in the user environment causing problems.
unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH
# What emacs should be called when installed.
EMACS_NAME = `echo emacs | sed '$(TRANSFORM)'`
EMACS = ${EMACS_NAME}${EXEEXT}
EMACSFULL = `echo emacs-${version} | sed '$(TRANSFORM)'`${EXEEXT}
EMACS_PDMP = `./src/emacs${EXEEXT} --fingerprint`.pdmp
# Subdirectories to make recursively.
SUBDIR = $(NTDIR) lib lib-src src lisp
@ -364,81 +342,10 @@ BIN_DESTDIR='${ns_appbindir}/'
ELN_DESTDIR = ${ns_applibdir}/
endif
gsettings_SCHEMAS = etc/org.gnu.emacs.defaults.gschema.xml
all:
$(MAKE) actual-all || $(MAKE) advice-on-failure make-target=all exit-status=$$?
$(MAKE) sanity-check make-target=all
# This target is used by the 'bootstrap' target in GNUmakefile, instead of 'all'.
bootstrap-all:
$(MAKE) actual-all || $(MAKE) advice-on-failure make-target=bootstrap exit-status=$$?
$(MAKE) sanity-check make-target=bootstrap
.PHONY: bootstrap-all actual-all advice-on-failure sanity-check
actual-all: ${SUBDIR} info $(gsettings_SCHEMAS:.xml=.valid) src-depending-on-lisp
# ADVICE-ON-FAILURE-BEGIN:all
# You could try to:
# - run "make bootstrap", which might fix the problem
# - run "make V=1", which displays the full commands invoked by make,
# to further investigate the problem
# ADVICE-ON-FAILURE-END:all
# ADVICE-ON-FAILURE-BEGIN:bootstrap
# You could try to:
# - run "make extraclean" and run "make" again (or, equivalently, run
# "make bootstrap configure=default"), to rebuild Emacs with the
# default configuration options, which might fix the problem
# - run "git clean -fdx" and run "make bootstrap" again, which might
# fix the problem if "make bootstrap configure=default" did not
# !BEWARE! "git clean -fdx" deletes all files that are not under
# !BEWARE! version control, which means that all changes to such
# !BEWARE! files will be lost and cannot be restored later
# - run "make V=1", which displays the full commands invoked by make,
# to further investigate the problem
# - report the problem and ask for help by sending an email to
# bug-gnu-emacs@gnu.org, mentioning at least the build error
# message, the platform, and the repository revision displayed by
# "git rev-parse HEAD"
# ADVICE-ON-FAILURE-END:bootstrap
advice-on-failure:
@[ -f .no-advice-on-failure ] && exit ${exit-status}; true
@echo >&2 '***'
@echo >&2 '*** '"\"make ${make-target}\" failed with exit status ${exit-status}."
@echo >&2 '***'
@cat Makefile | \
sed -n '/^# ADVICE-ON-FAILURE-BEGIN:${make-target}/,$${p;/^# ADVICE-ON-FAILURE-END:${make-target}/q;};' | \
sed 's/^# /*** /' | grep -v '^\*\*\* ADVICE-ON-FAILURE-' >&2
@echo >&2 '***'
@exit ${exit-status}
sanity-check:
@[ -f .no-advice-on-failure ] && exit 0; true
@v=`src/emacs${EXEEXT} --batch --eval \
'(progn (defun f (n) (if (= 0 n) 1 (* n (f (- n 1))))) (princ (f 10)))' \
2> /dev/null`; \
[ "X$$v" = "X3628800" ] && exit 0; \
echo >&2 '***'; \
echo >&2 '*** '"\"make ${make-target}\" succeeded, but Emacs is not functional."; \
echo >&2 '***'; \
cat Makefile | \
sed -n '/^# ADVICE-ON-FAILURE-BEGIN:${make-target}/,$${p;/^# ADVICE-ON-FAILURE-END:${make-target}/q;};' | \
sed 's/^# /*** /' | grep -v '^\*\*\* ADVICE-ON-FAILURE-' >&2; \
echo >&2 '***'; \
exit 1
all: ${SUBDIR} info
.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 epaths-force-ns-self-contained etc-emacsver
# Changes in lisp may require us to reconsider the build in src. For
# example, if loaddefs.{el,elc} were built in lisp, we need a new
# .pdmp containing the new autoloads.
.PHONY: src-depending-on-lisp
src-depending-on-lisp: lisp
${MAKE} -C src BIN_DESTDIR='$(BIN_DESTDIR)' ELN_DESTDIR='$(ELN_DESTDIR)'
# If configure were to just generate emacsver.tex from emacsver.tex.in
# in the normal way, the timestamp of emacsver.tex would always be
# newer than that of the pdf files, which are prebuilt in release tarfiles.
@ -517,10 +424,6 @@ epaths-force-ns-self-contained: epaths-force
-e 's;${ns_appdir}/;;') && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
ifneq ($(NTDIR),)
$(NTDIR): lib
endif
lib-src src: $(NTDIR) lib
src: lib-src
@ -532,16 +435,18 @@ lisp: src
lib lib-src lisp nt: Makefile
$(MAKE) -C $@ all
trampolines: src lisp
ifeq ($(HAVE_NATIVE_COMP),yes)
$(MAKE) -C lisp trampolines
endif
# Ideally, VCSWITNESS should be a file that is modified whenever the
# repository registers a commit from either a local checkin or a
# repository pull. In git there is no single file that guarantees
# this, but the local log for the current head should be close enough.
#
# Pass an unexpanded $srcdir to src's Makefile, which then
# expands it using its own value of srcdir (which points to the
# source directory of src/).
dirstate = .git/logs/HEAD
VCSWITNESS = $(if $(wildcard $(srcdir)/$(dirstate)),$$(srcdir)/../$(dirstate))
src: Makefile
$(MAKE) -C $@ BIN_DESTDIR='$(BIN_DESTDIR)' \
$(MAKE) -C $@ VCSWITNESS='$(VCSWITNESS)' BIN_DESTDIR='$(BIN_DESTDIR)' \
ELN_DESTDIR='$(ELN_DESTDIR)' all
blessmail: Makefile src
@ -589,7 +494,7 @@ $(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/m4/*.m4
## don't have to duplicate the list of utilities to install in
## this Makefile as well.
install: actual-all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) blessmail install-eln install-gsettings-schemas
install: all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) blessmail install-eln
@true
## Ensure that $subdir contains a subdirs.el file.
@ -615,14 +520,8 @@ install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
$(MAKE) -C lib-src install
ifeq (${ns_self_contained},no)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifeq (${HAVE_BE_APP},yes)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/Emacs "$(DESTDIR)${prefix}/apps/Emacs"
endif
ifeq (${DUMPING},pdumper)
ifeq (${HAVE_BE_APP},yes)
${INSTALL_DATA} src/Emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/Emacs.pdmp
endif
${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs-${EMACS_PDMP}
${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs.pdmp
endif
-chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifndef NO_BIN_LINK
@ -705,8 +604,8 @@ install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA}
[ -d $${dir} ] || exit 1 ; \
dest="$$1" ; shift ; \
if [ -d "$${dest}" ]; then \
exp_dest=`cd "$${dest}" && pwd -P`; \
[ "$$exp_dest" = "`cd $${dir} && pwd -P`" ] && continue ; \
exp_dest=`cd "$${dest}" && /bin/pwd`; \
[ "$$exp_dest" = "`cd $${dir} && /bin/pwd`" ] && continue ; \
else true; \
fi; \
rm -rf "$${dest}" ; \
@ -762,13 +661,15 @@ install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA}
install-etcdoc: src install-arch-indep
-unset CDPATH; \
umask 022; ${MKDIR_P} "$(DESTDIR)${etcdocdir}" ; \
exp_etcdocdir=`cd "$(DESTDIR)${etcdocdir}"; pwd -P`; \
if [ "`cd ./etc; pwd -P`" != "$$exp_etcdocdir" ]; \
exp_etcdocdir=`cd "$(DESTDIR)${etcdocdir}"; /bin/pwd`; \
if [ "`cd ./etc; /bin/pwd`" != "$$exp_etcdocdir" ]; \
then \
docfile="DOC"; \
printf 'Copying %s to %s ...\n' "etc/$$docfile" \
"$(DESTDIR)${etcdocdir}"; \
${INSTALL_DATA} etc/$${docfile} "$(DESTDIR)${etcdocdir}/$${docfile}"; \
$(set_installuser); \
chown $${installuser} "$(DESTDIR)${etcdocdir}/$${docfile}" || true ; \
else true; fi
## FIXME:
@ -778,9 +679,9 @@ install-etcdoc: src install-arch-indep
install-info: info
umask 022; ${MKDIR_P} "$(DESTDIR)${infodir}"
-unset CDPATH; \
thisdir=`pwd -P`; \
exp_infodir=`cd "$(DESTDIR)${infodir}" && pwd -P`; \
if [ "`cd ${srcdir}/info && pwd -P`" = "$$exp_infodir" ]; then \
thisdir=`/bin/pwd`; \
exp_infodir=`cd "$(DESTDIR)${infodir}" && /bin/pwd`; \
if [ "`cd ${srcdir}/info && /bin/pwd`" = "$$exp_infodir" ]; then \
true; \
else \
[ -f "$(DESTDIR)${infodir}/dir" ] || \
@ -809,7 +710,7 @@ install-info: info
## but not sure if portable.
install-man:
umask 022; ${MKDIR_P} "$(DESTDIR)${man1dir}"
thisdir=`pwd -P`; \
thisdir=`/bin/pwd`; \
cd ${mansrcdir}; \
for page in *.1; do \
test "$$page" = ChangeLog.1 && continue; \
@ -841,7 +742,7 @@ install-etc:
rm -f $${tmp}
tmp=etc/emacsclient.tmpdesktop; rm -f $${tmp}; \
client_name=`echo emacsclient | sed '$(TRANSFORM)'`${EXEEXT}; \
sed -e "/^Exec=/ s|emacsclient|${bindir}/$${client_name}|" \
sed -e "/^Exec=emacsclient/ s|emacsclient|${bindir}/$${client_name}|" \
-e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \
$(USE_STARTUP_NOTIFICATION_SED_CMD) \
${srcdir}/etc/emacsclient.desktop > $${tmp}; \
@ -855,7 +756,7 @@ install-etc:
rm -f $${tmp}
tmp=etc/emacsclient-mail.tmpdesktop; rm -f $${tmp}; \
client_name=`echo emacsclient | sed '$(TRANSFORM)'`${EXEEXT}; \
sed -e "/^Exec=/ s|emacsclient|${bindir}/$${client_name}|" \
sed -e "/^Exec=emacsclient/ s|emacsclient|${bindir}/$${client_name}|" \
-e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \
${srcdir}/etc/emacsclient-mail.desktop > $${tmp}; \
${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/$${client_name}-mail.desktop"; \
@ -876,7 +777,7 @@ install-etc:
${srcdir}/etc/emacs.service > $${tmp}; \
$(INSTALL_DATA) $${tmp} "$(DESTDIR)$(systemdunitdir)/${EMACS_NAME}.service"; \
rm -f $${tmp}
thisdir=`pwd -P`; \
thisdir=`/bin/pwd`; \
cd ${iconsrcdir} || exit 1; umask 022 ; \
for dir in */*/apps */*/mimetypes; do \
[ -d $${dir} ] || continue ; \
@ -907,14 +808,14 @@ install-strip:
### create (but not the noninstalled files such as 'make all' would create).
###
### Don't delete the lisp and etc directories if they're in the source tree.
uninstall: uninstall-$(NTDIR) uninstall-doc uninstall-gsettings-schemas
uninstall: uninstall-$(NTDIR) uninstall-doc
rm -f "$(DESTDIR)$(includedir)/emacs-module.h"
$(MAKE) -C lib-src uninstall
-unset CDPATH; \
for dir in "$(DESTDIR)${lispdir}" "$(DESTDIR)${etcdir}" "$(ELN_DESTDIR)" ; do \
if [ -d "$${dir}" ]; then \
case `cd "$${dir}" ; pwd -P` in \
"`cd ${srcdir} ; pwd -P`"* ) ;; \
case `cd "$${dir}" ; /bin/pwd` in \
"`cd ${srcdir} ; /bin/pwd`"* ) ;; \
* ) rm -rf "$${dir}" ;; \
esac ; \
case "$${dir}" in \
@ -925,7 +826,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc uninstall-gsettings-schemas
fi ; \
done
-rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}"
thisdir=`pwd -P`; \
thisdir=`/bin/pwd`; \
(info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
if cd "$(DESTDIR)${infodir}"; then \
for elt in ${INFO_NONMISC} $${info_misc}; do \
@ -1003,7 +904,7 @@ clean_dirs = $(mostlyclean_dirs) nextstep admin/charsets admin/unidata
$(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean)))
clean: $(clean_dirs:=_clean) clean-gsettings-schemas
clean: $(clean_dirs:=_clean)
-rm -f ./*.tmp etc/*.tmp*
-rm -rf info-dir.*
-rm -rf native-lisp
@ -1011,7 +912,7 @@ clean: $(clean_dirs:=_clean) clean-gsettings-schemas
### 'bootclean'
### Delete all files that need to be remade for a clean bootstrap.
top_bootclean=\
rm -f config.log ${srcdir}/doc/man/emacs.1
rm -f config.cache config.log ${srcdir}/doc/man/emacs.1
### 'distclean'
### Delete all files from the current directory that are created by
@ -1021,18 +922,15 @@ top_bootclean=\
### distribution.
top_distclean=\
${top_bootclean}; \
rm -f config.cache config.status config.log~ \
rm -f config.status config.log~ \
Makefile makefile lib/gnulib.mk ${SUBDIR_MAKEFILES}
distclean_dirs = $(clean_dirs) leim lisp admin/grammars
$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean)))
distclean: $(distclean_dirs:=_distclean) clean-gsettings-schemas
distclean: $(distclean_dirs:=_distclean)
${top_distclean}
ifeq ($(HAVE_NATIVE_COMP),yes)
rm -rf native-lisp
endif
### 'bootstrap-clean'
### Delete everything that can be reconstructed by 'make' and that
@ -1043,10 +941,6 @@ bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
[ ! -f config.log ] || mv -f config.log config.log~
rm -rf ${srcdir}/info
rm -f ${srcdir}/etc/refcards/emacsver.tex
rm -rf native-lisp/ lisp/leim/ja-dic/
ifndef FAST
rm -fr autom4te.cache config.cache
endif
${top_bootclean}
### 'maintainer-clean'
@ -1160,8 +1054,8 @@ info_dir_deps = \
## but then we would need to depend on ${INFOS}, which would
## slow down parallelization.
${srcdir}/info/dir: ${info_dir_deps}
$(AM_V_GEN)${MKDIR_P} ${srcdir}/info
$(AM_V_at)(cd ${srcdir}/doc && \
$(AM_V_at)${MKDIR_P} ${srcdir}/info
$(AM_V_GEN)(cd ${srcdir}/doc && \
AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \
) >$@.tmp && mv $@.tmp $@
@ -1240,30 +1134,17 @@ check-info: info
### This first cleans the lisp subdirectory, removing all compiled
### Lisp files. Then re-run make to build all the files anew.
.PHONY: bootstrap actual-bootstrap
.PHONY: bootstrap
bootstrap:
$(MAKE) actual-bootstrap || $(MAKE) advice-on-failure make-target=bootstrap exit-status=$$?
$(MAKE) sanity-check make-target=bootstrap
# Without a 'configure' variable, bootstrapping does the following:
# Bootstrapping does the following:
# * Remove files to start from a bootstrap-clean slate.
# * Run autogen.sh.
# * Rebuild Makefile, to update the build procedure itself.
# * Do the actual build.
# With a 'configure' variable, bootstrapping does the following:
# * Remove files to start from an extraclean slate.
# * Do the actual build, during which the 'configure' variable is
# used (see the Makefile goal in GNUmakefile).
actual-bootstrap:
ifndef configure
$(MAKE) bootstrap-clean
bootstrap: bootstrap-clean
cd $(srcdir) && ./autogen.sh autoconf
$(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile
else
$(MAKE) extraclean
endif
$(MAKE) actual-all
$(MAKE) all
.PHONY: ChangeLog change-history change-history-commit change-history-nocommit
.PHONY: preferred-branch-is-current unchanged-history-files
@ -1287,7 +1168,7 @@ PREFERRED_BRANCH = emacs-28
preferred-branch-is-current:
git branch | grep -q '^\* $(PREFERRED_BRANCH)$$'
unchanged-history-files:
x=`git diff-files --name-only $(CHANGELOG_N) $(emacslog)` && \
x=$$(git diff-files --name-only $(CHANGELOG_N) $(emacslog)) && \
test -z "$$x"
# Regular expression that matches the newest commit covered by a ChangeLog.
@ -1334,31 +1215,3 @@ gitmerge:
${GITMERGE_EMACS} -batch --no-site-file --no-site-lisp \
-l ${srcdir}/admin/gitmerge.el \
--eval '(setq gitmerge-minimum-missing ${GITMERGE_NMIN})' -f gitmerge
install-gsettings-schemas:
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
$(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"
$(INSTALL_DATA) $(srcdir)/$(gsettings_SCHEMAS) "$(DESTDIR)$(gsettingsschemadir)"
if [ -z "$(DESTDIR)" ]; then $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); fi
endif
uninstall-gsettings-schemas:
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
for x in $(gsettings_SCHEMAS); do \
xx=`echo $$x | sed -e 's|.*/||'`; \
rm -f "$(DESTDIR)$(gsettingsschemadir)/$${xx}"; \
done
if [ -z "$(DESTDIR)" ]; then $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); fi
endif
clean-gsettings-schemas:
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
rm -f $(gsettings_SCHEMAS:.xml=.valid)
endif
$(gsettings_SCHEMAS:.xml=.valid): $(srcdir)/$(gsettings_SCHEMAS)
ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
$(GLIB_COMPILE_SCHEMAS) --strict --dry-run --schema-file=$(srcdir)/$(gsettings_SCHEMAS)
$(MKDIR_P) $(@D)
touch $@
endif

2
README
View file

@ -2,7 +2,7 @@ Copyright (C) 2001-2023 Free Software Foundation, Inc.
See the end of the file for license conditions.
This directory tree holds version 30.0.50 of GNU Emacs, the extensible,
This directory tree holds version 28.3 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU

View file

@ -24,7 +24,6 @@ DARWIN_OS Compiling on macOS or pure Darwin (and using s/darwin.h).
SOLARIS2
USG
USG5_4
HAIKU Compiling on Haiku.
** Distinguishing GUIs **
@ -33,38 +32,16 @@ HAVE_NS Use the NeXT/OpenStep/Cocoa UI under macOS or GNUstep.
NS_IMPL_GNUSTEP Compile support for GNUstep implementation of NS GUI API.
NS_IMPL_COCOA Compile support for Cocoa (Apple) implementation of NS GUI API.
HAVE_X11 Compile support for the X11 GUI.
HAVE_PGTK Compile support for using GTK itself without directly using X Windows APIs.
HAVE_HAIKU Compile support for the Haiku window system.
HAVE_X_WINDOWS Compile support for X Window system
(It looks like, nowadays, if HAVE_X11 is set, HAVE_X_WINDOWS must
be, and vice versa. At least, this is true for configure, and
msdos; not sure about nt.)
** X Windows features **
HAVE_X11R6 Whether or not the system has X11R6. (Always defined.)
HAVE_X11R6_XIM Whether or not the system supports XIM features introduced in R6.
HAVE_X11XTR6 Whether or not the Xt is from X11R6 or newer.
HAVE_X11R6
HAVE_X11R6_XIM
HAVE_X11XTR6
USE_LUCID Use the Lucid toolkit for menus&scrollbars. Requires HAVE_X11.
USE_MOTIF Use the Motif toolkit for menus&scrollbars. Requires HAVE_X11.
USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11 or HAVE_PGTK.
HAVE_GTK3 Use GTK version 3 or later. Requires HAVE_X11.
HAVE_XCB_SHAPE Whether or not XCB supports the Nonrectangular Window Shape extension.
HAVE_XCOMPOSITE Whether or not the XCOMPOSITE extension library is present.
HAVE_XDBE Whether or not to use the Xdbe extension for double buffering.
HAVE_XFIXES Whether or not the Xfixes extension library is present.
HAVE_XINERAMA Whether or not the Xinerama extension library is present.
HAVE_XINPUT2 Whether or not to use version 2 of the X Input Extension for input.
HAVE_XINPUT2_1 Whether or not version 2.1 of the X Input Extension is supported.
HAVE_XINPUT2_2 Whether or not version 2.2 of the X Input Extension is supported.
HAVE_XINPUT2_3 Whether or not version 2.3 of the X Input Extension is supported.
HAVE_XINPUT2_4 Whether or not version 2.4 of the X Input Extension is supported.
HAVE_XKB Whether or not the XKB extension library is present.
HAVE_XRANDR Whether or not the RandR extension library is present.
HAVE_XSHAPE Whether or not the Nonrectangular Window Shape extension library is present.
HAVE_XSYNC Whether or not the X Synchronization Extension library is present.
USE_XCB Whether or not the XCB library is used to optimize some X requests.
USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11.
** Frame types **
@ -310,8 +287,6 @@ HAVE_UTIMENSAT
HAVE_UTMP_H
HAVE_VFORK
HAVE_VFORK_H
HAVE_WEBP
HAVE_SQLITE3
HAVE_WCHAR_H
HAVE_WCHAR_T
HAVE_WINDOW_SYSTEM

View file

@ -58,7 +58,10 @@ Artur Malabarba
Michael Albinus
Tramp
lisp/net/tramp*.el
lisp/url/url-tramp.el
doc/misc/tramp*.texi
test/lisp/net/tramp*-tests.el
test/lisp/url/url-tramp-tests.el
D-Bus
@ -135,31 +138,6 @@ Andrea Corallo
lisp/emacs-lisp/comp-cstr.el
test/src/comp-*.el
Stefan Kangas
admin/automerge
admin/update_autogen
Po Lu
The Haiku port:
src/haikuterm.c
src/haikufns.c
src/haikuimage.c
src/haikuselect.c
src/haiku_io.c
src/haiku.c
src/haiku_select.cc
src/haiku_support.cc
src/haiku_font_support.cc
src/haiku_draw_support.cc
src/haikugui.h
src/haikuterm.h
src/haikuselect.h
src/haiku_support.h
lisp/term/haiku-win.el
doc/emacs/haiku.texi
Haiku battery support in lisp/battery.el
==============================================================================
2. Areas that someone is willing to maintain, although he would not
necessarily mind if someone else was the official maintainer.
@ -250,7 +228,6 @@ Michael Albinus
lisp/net/ange-ftp.el
lisp/notifications.el
lisp/shadowfile.el
test/infra/*
test/lisp/autorevert-tests.el
test/lisp/files-tests.el (file-name-non-special)
test/lisp/shadowfile-tests.el
@ -276,60 +253,19 @@ Vibhav Pant
lisp/net/browse-url.el
lisp/erc/*
Alan Third
The NS port:
nextstep/*
src/ns*
src/*.m
lisp/term/ns-win.el
doc/emacs/macos.texi
Amin Bandali
Eshell
lisp/eshell/*
doc/misc/eshell.texi
Po Lu
The X port
src/xterm.c
src/xfns.c
X11 and GTK xwidget support in src/xwidget.c
Precision pixel scrolling in lisp/pixel-scroll.el
==============================================================================
3. Externally maintained packages.
==============================================================================
Tramp
Maintainer: Michael Albinus
Repository: https://git.savannah.gnu.org/git/tramp.git
Mailing List: tramp-devel@gnu.org
Bug Reports: M-x tramp-bug
Notes: For backward compatibility requirements, see
lisp/net/trampver.el.
lisp/net/tramp*.el
doc/misc/tramp*.texi
test/lisp/net/tramp*-tests.el
Modus themes
Maintainer: Protesilaos Stavrou
Repository: https://git.sr.ht/~protesilaos
Mailing list: https://lists.sr.ht/~protesilaos/modus-themes
Bug Reports: M-x modus-themes-report-bug
doc/misc/modus-themes.org
etc/themes/modus*.el
Org Mode
Home Page: https://orgmode.org/
Maintainer: Org Mode developers
Repository: https://git.savannah.gnu.org/git/emacs/org-mode.git
Mailing list: emacs-orgmode@gnu.org
Bug Reports: M-x org-submit-bug-report
Notes: Org Mode is maintained as a separate project that is
periodically merged into Emacs. To view or participate in
Org Mode development, please go to https://orgmode.org/ and
follow the instructions there.
lisp/org/*.el
etc/org/*
etc/refcards/orgcard.tex
doc/misc/org.org
doc/misc/org-setup.org
;;; Local Variables:
;;; coding: utf-8

View file

@ -88,9 +88,6 @@ Optional argument DATE is the release date, default today."
(kill-buffer)
(message "No need to update `%s'" file)))
(defvar admin-git-command (executable-find "git")
"The `git' program to use.")
(defun set-version (root version)
"Set Emacs version to VERSION in relevant files under ROOT.
Root must be the root of an Emacs source tree."
@ -99,8 +96,6 @@ Root must be the root of an Emacs source tree."
(read-string "Version number: " emacs-version)))
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
(unless admin-git-command
(user-error "Could not find git; please install git and move NEWS manually"))
(message "Setting version numbers...")
;; There's also a "version 3" (standing for GPLv3) at the end of
;; `README', but since `set-version-in-file' only replaces the first
@ -124,6 +119,9 @@ Root must be the root of an Emacs source tree."
;; Major version only.
(when (string-match "\\([0-9]\\{2,\\}\\)" version)
(let ((newmajor (match-string 1 version)))
(set-version-in-file root "src/msdos.c" newmajor
(rx (and "Vwindow_system_version" (1+ not-newline)
?\( (submatch (1+ (in "0-9"))) ?\))))
(set-version-in-file root "etc/refcards/ru-refcard.tex" newmajor
"\\\\newcommand{\\\\versionemacs}\\[0\\]\
{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs")))
@ -159,13 +157,7 @@ Root must be the root of an Emacs source tree."
Documentation changes might not have been completed!"))))
(when (and majorbump
(not (file-exists-p oldnewsfile)))
(call-process admin-git-command nil nil nil
"mv" newsfile oldnewsfile)
(when (y-or-n-p "Commit move of NEWS file?")
(call-process admin-git-command nil nil nil
"commit" "-m" (format "; Move etc/%s to etc/%s"
(file-name-nondirectory newsfile)
(file-name-nondirectory oldnewsfile))))
(rename-file newsfile oldnewsfile)
(find-file oldnewsfile) ; to prompt you to commit it
(copy-file oldnewsfile newsfile)
(with-temp-buffer
@ -843,11 +835,8 @@ $Date: %s $
(package-install pkg)
(require pkg nil t))))
(declare-function org-html-export-as-html "ox-html.el")
(defvar org-html-postamble)
(defvar org-html-mathjax-template)
(defvar htmlize-output-type)
(defun make-news-html-file (root version)
"Convert the NEWS file into an HTML file."
(interactive (let ((root

View file

@ -23,7 +23,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
void
fatal (const char *fmt, ...)

View file

@ -182,7 +182,7 @@ files.")
("Philip Kaludercic" "Philip K\\." "Philip K")
("Philipp Stephani" "Philipp .*phst@google")
("Piotr Zieliński" "Piotr Zielinski")
("Po Lu" "Po Lu Via" "Your Name") ; looks like a mistake
("Po Lu" "Po Lu Via") ; looks like a mistake
("Przemysław Wojnowski" "Przemyslaw Wojnowski")
("R. Bernstein" "rb@dustyfeet.com")
("Rainer Schöpf" "Rainer Schoepf")
@ -397,8 +397,6 @@ Changes to files matching one of the regexps in this list are not listed.")
"autogen/missing" "autogen"
"autogen/copy_autogen" ; not generated, but trivial and now removed
"dir_top"
;; Imported into Emacs but externally maintained.
"publicsuffix.txt" "SKK-JISYO.L"
;; Only existed briefly, then renamed:
"images/icons/allout-widgets-dark-bg"
"images/icons/allout-widgets-light-bg"
@ -990,7 +988,7 @@ in the repository.")
;; to how a file was mentioned in the respective ChangeLog. It is
;; advisable to run a Grep command such as
;;
;; grep -F -R BASENAME . --include='ChangeLog*'
;; fgrep -R BASENAME . --include='ChangeLog*'
;;
;; where BASENAME is the old basename of the renamed file. This will
;; show all the different reference forms of the file in the various
@ -1883,7 +1881,7 @@ list of their contributions.\n")
(insert "\n "))
(insert " " file))
(insert "\n")))))
(insert "\nLocal" " Variables:\nmode: emacs-authors\ncoding: "
(insert "\nLocal" " Variables:\nmode: etc-authors\ncoding: "
(symbol-name authors-coding-system) "\nEnd:\n")
(message "Generating buffer %s... done" buffer-name)
(unless noninteractive

View file

@ -4,7 +4,7 @@
## Copyright (C) 2018-2023 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org>
## Maintainer: Stefan Kangas <stefankangas@gmail.com>
## Maintainer: emacs-devel@gnu.org
## This file is part of GNU Emacs.
@ -35,7 +35,16 @@
## it with the -d option in the repository directory, in case a pull
## updates this script while it is working.
source "${0%/*}/emacs-shell-lib"
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
PN=${0##*/} # basename of script
PD=${0%/*}
[ "$PD" = "$0" ] && PD=. # if PATH includes PWD
usage ()
{
@ -99,8 +108,7 @@ OPTIND=1
[ "$nocd" ] || {
# $PD should be the admin directory
cd $PD || die "Could not change directory to $PD"
cd $PD # this should be the admin directory
cd ../
}
@ -118,7 +126,9 @@ OPTIND=1
[ "$test" ] && build=1
tempfile="$(emacs_mktemp)"
tempfile=/tmp/$PN.$$
trap "rm -f $tempfile 2> /dev/null" EXIT
[ -e Makefile ] && [ "$build" ] && {
@ -138,7 +148,7 @@ tempfile="$(emacs_mktemp)"
rev=$(git rev-parse HEAD)
[ "$(git rev-parse @{u})" = "$rev" ] || die "Local state does not match origin"
[ $(git rev-parse @{u}) = $rev ] || die "Local state does not match origin"
merge ()
@ -147,12 +157,12 @@ merge ()
if $emacs --batch -Q -l ./admin/gitmerge.el \
--eval "(setq gitmerge-minimum-missing $nmin)" -f gitmerge \
>| "$tempfile" 2>&1; then
>| $tempfile 2>&1; then
echo "merged ok"
return 0
else
grep -E "Nothing to merge|Number of missing commits" "$tempfile" && \
grep -E "Nothing to merge|Number of missing commits" $tempfile && \
exit 0
cat "$tempfile" 1>&2
@ -176,13 +186,13 @@ git diff --stat --cached origin/master | grep -q "etc/NEWS " && \
echo "Running autoreconf..."
autoreconf -i -I m4 2>| "$tempfile"
autoreconf -i -I m4 2>| $tempfile
retval=$?
## Annoyingly, autoreconf puts the "installing `./foo' messages on stderr.
if [ "$quiet" ]; then
grep -v 'installing `\.' "$tempfile" 1>&2
grep -v 'installing `\.' $tempfile 1>&2
else
cat "$tempfile" 1>&2
fi
@ -221,7 +231,7 @@ echo "Tests finished ok"
echo "Checking for remote changes..."
git fetch || die "fetch error"
[ "$(git rev-parse @{u})" = "$rev" ] || {
[ $(git rev-parse @{u}) = $rev ] || {
echo "Upstream has changed"
@ -230,7 +240,7 @@ git fetch || die "fetch error"
## Ref eg https://lists.gnu.org/r/emacs-devel/2014-12/msg01435.html
## Instead, we throw away what we just did, and do the merge again.
echo "Resetting..."
git reset --hard "$rev"
git reset --hard $rev
echo "Pulling..."
git pull --ff-only || die "pull error"
@ -246,3 +256,5 @@ git push || die "push error"
exit 0
### automerge ends here

View file

@ -181,7 +181,7 @@ ${charsetdir}/GB180304.map: ${charsetdir}/GB180302.map ${gb180304}
${AM_V_GEN}$(AWK) -f ${gb180304} < $< > $@
${charsetdir}/JISX0201.map: ${GLIBC_CHARMAPS}/JIS_X0201.gz ${mapconv} ${compact}
${AM_V_GEN}(${run_mapconv} $< '/^<.*[ ]\/x[0-9]/' GLIBC-1 ${compact} && \
${AM_V_GEN}(${mapconv} $< '/^<.*[ ]\/x[0-9]/' GLIBC-1 ${compact} && \
echo "# Generated by hand" && \
echo "0xA1-0xDF 0xFF61" ) > $@

View file

@ -38,8 +38,7 @@
## So that eg [A-F] as used by KANJI-DATABASE branch below works as expected.
## Otherwise with LANG=en_US.utf8, CNS-6.map was generated with a
## bogus entry. By experiment, LC_COLLATE=C was not enough.
LC_ALL=C
export LC_ALL
export LC_ALL=C
BASE=`expr "$1" : '.*/\(.*\)' '|' "$1"` # basename
FILE="admin/charsets/mapfiles/$BASE"

View file

@ -54,7 +54,7 @@
#
# [v0.1, 5 May 1995] First release.
#
# Use the Unicode reporting form <https://www.unicode.org/reporting.html>
# Use the Unicode reporting form <http://www.unicode.org/reporting.html>
# for any questions or comments or to report errors in the data.
#
0020 20 # SPACE # space

View file

@ -57,7 +57,7 @@
#
# [v0.1, 5 May 1995] First release.
#
# Use the Unicode reporting form <https://www.unicode.org/reporting.html>
# Use the Unicode reporting form <http://www.unicode.org/reporting.html>
# for any questions or comments or to report errors in the data.
#
0020 20 # SPACE # space

View file

@ -290,7 +290,13 @@ while (my $file = <FIND>) {
}
}
my @pkgs = ();
my @pkgs;
if (-d "../xemacs-packages") {
@pkgs = qw (libs/edebug libs/xemacs-base comm/eudc oa/edit-utils);
} else {
@pkgs = ();
}
for (@pkgs) { s@^@../xemacs-packages/@; }
open (FIND, "find lisp @pkgs -name '*.el' -print |") or die;
while (my $file = <FIND>) {
my $contents = FileContents $file;

View file

@ -1,56 +0,0 @@
#!/bin/bash
### check-man-pages - check man pages for errors
## Copyright (C) 2022-2023 Free Software Foundation, Inc.
## Author: Stefan Kangas <stefankangas@gmail.com>
## This file is part of GNU Emacs.
## 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 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
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Commentary:
## Check Emacs man pages for errors using `man'.
### Code:
source "${0%/*}/emacs-shell-lib"
exit_status=0
cd "$PD"/../doc/man
for page in *.1; do
# ctags.1 just includes the man page etags.1, which AFAICT will
# default to the one installed on the system (!), instead of the
# one in the repository. So checking it is pointless, and we will
# in any case already check etags.1 separately.
if [ "$page" == "ctags.1" ]; then
continue
fi
log=$(emacs_mktemp)
LC_ALL=C.UTF-8 MANROFFSEQ='' MANWIDTH=80 \
man --warnings=all,mac -E UTF-8 -l -Tutf8 -Z "$page" >/dev/null 2> "$log"
log_size=$(stat --format=%s "$log")
if [ "$log_size" -ne 0 ]; then
echo "doc/man/$page:"
# Point to the correct file for *compilation* buffers.
cat "$log" \
| sed 's/troff: man1\/\([^ ]\+\)\.1/troff: doc\/man\/\1.1/' \
| sed "s/<standard input>/doc\/man\/$page/"
exit_status=1
fi
done
exit $exit_status

View file

@ -106,6 +106,9 @@ Lisp_Object O;
- W->column_number_displayed
+ WVAR (W, column_number_displayed)
|
- W->redisplay_end_trigger
+ WVAR (W, redisplay_end_trigger)
|
- W->combination_limit
+ WVAR (W, combination_limit)
|
@ -222,6 +225,9 @@ Lisp_Object O;
- XWINDOW (O)->column_number_displayed
+ WVAR (XWINDOW (O), column_number_displayed)
|
- XWINDOW (O)->redisplay_end_trigger
+ WVAR (XWINDOW (O), redisplay_end_trigger)
|
- XWINDOW (O)->combination_limit
+ WVAR (XWINDOW (O), combination_limit)
|

View file

@ -131,7 +131,7 @@ Names should be as they appear in loaddefs.el.")
;; Don't create a file `abbrev-file-name'.
(setq save-abbrevs nil)
;; Avoid compile logs from advised functions.
;; Avoid compile logs from adviced functions.
(eval-after-load "bytecomp"
'(setq ad-default-compilation-action 'never))
@ -145,8 +145,7 @@ Names should be as they appear in loaddefs.el.")
(require 'cus-load)
(defvar cus-test-errors nil
"List of problematic variables found by `cus-test-apropos'.
Each element is (VARIABLE . PROBLEM); see `cus-test--format-problem'.")
"List of problematic variables found by `cus-test-apropos'.")
(defvar cus-test-tested-variables nil
"List of options tested by last call of `cus-test-apropos'.")
@ -157,7 +156,7 @@ Each element is (VARIABLE . PROBLEM); see `cus-test--format-problem'.")
"Set by `cus-test-apropos' to a list of options with :get property.")
(defvar cus-test-vars-with-changed-state nil
"Set by `cus-test-apropos' to a list of options with state \\='changed.")
"Set by `cus-test-apropos' to a list of options with state 'changed.")
(defvar cus-test-deps-errors nil
"List of require/load problems found by `cus-test-deps'.")
@ -182,15 +181,6 @@ Set by `cus-test-noloads'.")
;; (defvar cus-test-vars-cus-loaded nil
;; "A list of options loaded by `custom-load-symbol'.")
(defun cus-test--format-error (err)
"Format an element of `cus-test-errors'."
(pcase err
(`(,var :type-error ,value ,type)
(format "variable: %s\n value: %S\n type: %S" var value type))
(`(,var :other-error ,e)
(format "variable: %s\n error: %S" var e))
(_ (format "%S" err))))
(defun cus-test-apropos (regexp)
"Check the options matching REGEXP.
The detected problematic options are stored in `cus-test-errors'."
@ -210,7 +200,8 @@ The detected problematic options are stored in `cus-test-errors'."
(let* ((type (custom-variable-type symbol))
(conv (widget-convert type))
(get (or (get symbol 'custom-get) 'default-value))
values)
values
mismatch)
(when (default-boundp symbol)
(push (funcall get symbol) values)
(push (eval (car (get symbol 'standard-value)) t) values))
@ -224,9 +215,7 @@ The detected problematic options are stored in `cus-test-errors'."
;; TODO for booleans, check for values that can be
;; evaluated and are not t or nil. Usually a bug.
(unless (widget-apply conv :match value)
(let ((err (list symbol :type-error value type)))
(unless (member err cus-test-errors)
(push err cus-test-errors)))))
(setq mismatch 'mismatch)))
values)
;; Store symbols with a custom-get property.
@ -242,12 +231,13 @@ The detected problematic options are stored in `cus-test-errors'."
(and (consp c-value)
(boundp symbol)
(not (equal (eval (car c-value) t) (symbol-value symbol)))
(add-to-list 'cus-test-vars-with-changed-state symbol))))
(add-to-list 'cus-test-vars-with-changed-state symbol)))
(if mismatch
(push symbol cus-test-errors)))
(error
(let ((err (list symbol :other-error alpha)))
(unless (member err cus-test-errors)
(push err cus-test-errors)))
(push symbol cus-test-errors)
(message "Error for %s: %s" symbol alpha))))
(cus-test-get-options regexp))
(message "%s options tested"
@ -282,7 +272,7 @@ currently defined groups."
(if group
(memq symbol groups)
(or
;; (custom-variable-p symbol)
;; (user-variable-p symbol)
(get symbol 'standard-value)
;; (get symbol 'saved-value)
(get symbol 'custom-type)))
@ -302,7 +292,7 @@ currently defined groups."
(insert "No errors found by cus-test.")
(insert "The following variables seem to have problems:\n\n")
(dolist (e cus-test-errors)
(insert (cus-test--format-error e) "\n")))))
(insert (symbol-name e) "\n")))))
(defun cus-test-load-custom-loads ()
"Call `custom-load-symbol' on all atoms."
@ -409,7 +399,7 @@ Returns a list of variables with suspicious types."
(message "No problems found")
nil)
(message "The following options might have problems:")
(cus-test-message (mapcar #'cus-test--format-error cus-test-errors))
(cus-test-message cus-test-errors)
cus-test-errors))
(defun cus-test-deps ()

View file

@ -1,4 +1,4 @@
#!/bin/bash
#! /bin/sh
# Copyright (C) 2001-2023 Free Software Foundation, Inc.
@ -17,7 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
source "${0%/*}/emacs-shell-lib"
if [ $# != 2 ]; then
cat <<EOF
@ -32,8 +31,9 @@ fi
old_tar=$1
new_tar=$2
old_tmp="$(emacs_mktemp ${PN}-old)"
new_tmp="$(emacs_mktemp ${PN}-new)"
old_tmp=/tmp/old.$$
new_tmp=/tmp/new.$$
trap "rm -f $old_tmp $new_tmp; exit 1" 1 2 15
tar tf "$old_tar" | sed -e 's,^[^/]*,,' | sort > $old_tmp
tar tf "$new_tar" | sed -e 's,^[^/]*,,' | sort > $new_tmp

View file

@ -1,87 +0,0 @@
#!/bin/bash
### emacs-shell-lib - shared code for Emacs shell scripts
## Copyright (C) 2022-2023 Free Software Foundation, Inc.
## Author: Stefan Kangas <stefankangas@gmail.com>
## This file is part of GNU Emacs.
## 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 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
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Code:
# Set an explicit umask.
umask 077
# Treat unset variables as an error.
set -o nounset
# Exit immediately on error.
set -o errexit
# Avoid non-standard command output from non-C locales.
unset LANG LC_ALL LC_MESSAGES
PN=${0##*/} # basename of script
PD=${0%/*} # script directory
[ "$PD" = "$0" ] && PD=. # if PATH includes PWD
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
emacs_tempfiles=()
emacs_tempfiles_cleanup ()
{
for file in ${emacs_tempfiles[@]}; do
rm -f "${file}" 2> /dev/null
done
}
trap '
ret=$?
emacs_tempfiles_cleanup
exit $ret
' EXIT
emacs_mktemp ()
{
local readonly file="${1-}"
local tempfile
local prefix
if [ -z "$file" ]; then
prefix="$PN"
else
prefix="$1"
fi
if [ -x "$(command -v mktemp)" ]; then
tempfile=$(mktemp "${TMPDIR-/tmp}/${prefix}.XXXXXXXXXX")
else
tempfile="${TMPDIR-/tmp}/${prefix}.$RANDOM$$"
(umask 077 && touch "$tempfile")
fi
[ -z "${tempfile}" ] && die "Creating temporary file failed"
emacs_tempfiles+=("${tempfile}")
echo "$tempfile"
}

View file

@ -1,22 +1,5 @@
#!/bin/bash
# Copyright (C) 2022-2023 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
# 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 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
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
# This script is meant to be used as ./admin/emake, and will compile
# the Emacs tree with virtually all of the informational messages
# removed, and with errors/warnings highlighted in red. It'll give a
@ -30,27 +13,14 @@ cores=1
# Determine the number of cores.
if [ -f /proc/cpuinfo ]; then
cores=$(($(grep -E "^physical id|^cpu cores" /proc/cpuinfo |\
cores=$(($(egrep "^physical id|^cpu cores" /proc/cpuinfo |\
awk '{ print $4; }' |\
sed '$!N;s/\n/ /' |\
uniq |\
sed 's/^[0-9]*/+/')))
fi
NOCOLOR=0
NOCHECK=0
FASTOPT="FAST=true"
QUIETER=0
while :
do
[[ "X$1" == "X--no-color" ]] && { NOCOLOR=1; shift; continue; }
[[ "X$1" == "X--no-check" ]] && { NOCHECK=1; shift; continue; }
[[ "X$1" == "X--no-fast" ]] && { FASTOPT=""; shift; continue; }
[[ "X$1" == "X--quieter" ]] && { QUIETER=1; shift; continue; }
break
done
make $FASTOPT -j$cores "$@" 2>&1 | \
make -j$cores "$@" 2>&1 | \
sed -u 's# \.\./\.\./# #
s# \.\./# #
s#^Configuring local git # Configuring local git #
@ -58,23 +28,20 @@ s#^Installing git hooks...# Installing git hooks...#
s#^Running # Running #
s#^Configured for # Configured for #
s#^./temacs.*# \\& #
s#^make.*Error# \\& #
s#^Dumping under the name.*# \\& #
:a;/\\$/N;s/\\\n//;ta
' | \
grep -E --line-buffered -v "^make|\
egrep --line-buffered -v "^make|\
^Loading|\
SCRAPE|\
INFO.*Scraping.*[.] ?\$|\
INFO.*Scraping.*done\$|\
GEN.*etc/DOC|\
GEN.*autoloads|\
^Waiting for git|\
^Finding pointers|\
^Using load-path|\
^Adding name|\
^Dump mode|\
^Dumping finger|\
^Dumping under the name|\
^Byte counts|\
^Reloc counts|\
^Pure-hashed|\
@ -111,42 +78,18 @@ The GNU allocators don't work|\
^git config |\
^'\.git/|\
^\^\(\(|\
^ANCIENT=yes make|\
^touch -t|\
^'build-aux/git-hooks|\
^GNUmakefile:[0-9]*: There seems to be no |\
^GNUmakefile:[0-9]*: Running |\
^GNUmakefile:[0-9]*: No Makefile|\
^rm -f |\
^rm -rf|\
^find \. |\
^rm -fr deps|\
^if test -f \./\.gdbinit|\
^true|\
^for file in |\
^rmdir|\
^\[ \"\.\" = \"\.\" \]\
^'build-aux/git-hooks\
" | \
while read
do
C=""
(($NOCOLOR == 0)) && [[ "X${REPLY:0:1}" != "X " ]] && C="\033[1;31m"
(($NOCOLOR == 0)) && [[ "X${REPLY:0:3}" == "X " ]] && C="\033[1;31m"
if (($QUIETER == 0))
then
[[ "X$C" == "X" ]] && printf "%s\n" "$REPLY" || printf "$C%s\033[0m\n" "$REPLY"
else
[[ "X$C" == "X" ]] && printf "%-80s\r" "$REPLY" || printf "$C%-80s\033[0m\n" "$REPLY"
fi
[[ "X${REPLY:0:1}" != "X " ]] && C="\033[1;31m"
[[ "X${REPLY:0:3}" == "X " ]] && C="\033[1;31m"
[[ "X$C" == "X" ]] && printf "%s\n" "$REPLY" || printf "$C%s\033[0m\n" "$REPLY"
done
# If make failed, exit now with its error code.
((${PIPESTATUS[0]} != 0)) && exit ${PIPESTATUS[0]}
(($NOCHECK == 1)) && exit 0
# Run a "make check" on all test files belonging to files that have
# changed since last time.
make -j$cores check-maybe 2>&1 | \
sed -n '/contained unexpected results/,$p' | \
grep -E --line-buffered -v "^make"
egrep --line-buffered -v "^make"

View file

@ -100,7 +100,7 @@ Also store it in `find-gc-unsafe-list'."
(defun trace-call-tree (&optional _ignored)
(defun trace-call-tree (&optional ignored)
(message "Setting up directories...")
(setq find-gc-subrs-called nil)
(let ((case-fold-search nil)

File diff suppressed because it is too large Load diff

View file

@ -37,10 +37,10 @@
;; up-to-date).
;; - Mark commits you'd like to skip, meaning to only merge their
;; metadata (merge strategy 'ours').
;; - Hit 'm' to start merging. Skipped commits will be merged separately.
;; - Hit 'm' to start merging. Skipped commits will be merged separately.
;; - If conflicts cannot be resolved automatically, you'll have to do
;; it manually. In that case, resolve the conflicts and restart
;; gitmerge, which will automatically resume. It will add resolved
;; it manually. In that case, resolve the conflicts and restart
;; gitmerge, which will automatically resume. It will add resolved
;; files, commit the pending merge and continue merging the rest.
;; - Inspect master branch, and if everything looks OK, push.
@ -68,7 +68,8 @@ bump Emacs version\\|Auto-commit"))
(defvar gitmerge-minimum-missing 10
"Minimum number of missing commits to consider merging in batch mode.")
(defvar gitmerge-status-file (locate-user-emacs-file "gitmerge-status")
(defvar gitmerge-status-file (expand-file-name "gitmerge-status"
user-emacs-directory)
"File where missing commits will be saved between sessions.")
(defvar gitmerge-ignore-branches-regexp
@ -97,14 +98,11 @@ If nil, the function `gitmerge-default-branch' guesses.")
(defvar gitmerge-mode-map
(let ((map (make-keymap)))
(define-key map [(l)] #'gitmerge-show-log)
(define-key map [(d)] #'gitmerge-show-diff)
(define-key map [(f)] #'gitmerge-show-files)
(define-key map [(s)] #'gitmerge-toggle-skip)
(define-key map [(m)] #'gitmerge-start-merge)
;; For convenience:
(define-key map [(n)] #'next-line)
(define-key map [(p)] #'previous-line)
(define-key map [(l)] 'gitmerge-show-log)
(define-key map [(d)] 'gitmerge-show-diff)
(define-key map [(f)] 'gitmerge-show-files)
(define-key map [(s)] 'gitmerge-toggle-skip)
(define-key map [(m)] 'gitmerge-start-merge)
map)
"Keymap for gitmerge major mode.")
@ -124,21 +122,20 @@ If nil, the function `gitmerge-default-branch' guesses.")
(with-temp-buffer
(if (not branch)
(insert-file-contents "configure.ac")
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "show" (format "%s:configure.ac" branch)))
(call-process "git" nil t nil "show" (format "%s:configure.ac" branch))
(goto-char (point-min)))
(re-search-forward "^AC_INIT([^,]+, \\[?\\([0-9]+\\)\\.")
(re-search-forward "^AC_INIT([^,]+, \\([0-9]+\\)\\.")
(string-to-number (match-string 1))))
(defun gitmerge-default-branch ()
"Default for branch that should be merged; e.g. \"origin/emacs-28\"."
"Default for branch that should be merged; eg \"origin/emacs-26\"."
(or gitmerge-default-branch
(format "origin/emacs-%s" (1- (gitmerge-emacs-version)))))
(defun gitmerge-get-sha1 ()
"Get SHA1 from commit at point."
(save-excursion
(goto-char (line-beginning-position))
(goto-char (point-at-bol))
(when (looking-at "^[A-Z ]\\s-*\\([a-f0-9]+\\)")
(match-string 1))))
@ -151,8 +148,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(fundamental-mode)
(erase-buffer)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "log" "-1" commit))
(call-process "git" nil t nil "log" "-1" commit)
(goto-char (point-min))
(gitmerge-highlight-skip-regexp)))))
@ -164,8 +160,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
(when commit
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(erase-buffer)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "diff-tree" "-p" commit))
(call-process "git" nil t nil "diff-tree" "-p" commit)
(goto-char (point-min))
(diff-mode)))))
@ -178,9 +173,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(erase-buffer)
(fundamental-mode)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "diff" "--name-only"
(concat commit "^!")))
(call-process "git" nil t nil "diff" "--name-only" (concat commit "^!"))
(goto-char (point-min))))))
(defun gitmerge-toggle-skip ()
@ -190,7 +183,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
skip)
(when commit
(save-excursion
(goto-char (line-beginning-position))
(goto-char (point-at-bol))
(when (looking-at "^\\([A-Z ]\\)\\s-*\\([a-f0-9]+\\)")
(setq skip (string= (match-string 1) " "))
(goto-char (match-beginning 2))
@ -198,7 +191,7 @@ If nil, the function `gitmerge-default-branch' guesses.")
(dolist (ct gitmerge--commits)
(when (string-match commit (car ct))
(setcdr ct (when skip "M"))))
(goto-char (line-beginning-position))
(goto-char (point-at-bol))
(setq buffer-read-only nil)
(delete-char 1)
(insert (if skip "M" " "))
@ -223,10 +216,9 @@ if and why this commit should be skipped."
;; Go through the log and remember all commits that match
;; `gitmerge-skip-regexp' or are marked by --cherry-mark.
(with-temp-buffer
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "log" "--cherry-mark" "--left-only"
"--no-decorate"
(concat from "..." (car (vc-git-branches)))))
(call-process "git" nil t nil "log" "--cherry-mark" "--left-only"
"--no-decorate"
(concat from "..." (car (vc-git-branches))))
(goto-char (point-max))
(while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t)
(let ((cherrymark (match-string 1))
@ -249,10 +241,9 @@ if and why this commit should be skipped."
"Create the buffer for choosing commits."
(with-current-buffer (get-buffer-create gitmerge-buffer)
(erase-buffer)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "log" "--left-only"
"--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
(concat from "..." (car (vc-git-branches)))))
(call-process "git" nil t nil "log" "--left-only"
"--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
(concat from "..." (car (vc-git-branches))))
(goto-char (point-min))
(while (looking-at "^\\([a-f0-9]+\\)")
(let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits)))
@ -293,7 +284,7 @@ should not be skipped."
"Try to resolve conflicts in FILE with smerge.
Returns non-nil if conflicts remain."
(unless (file-exists-p file) (error "Gitmerge-resolve: Can't find %s" file))
(with-demoted-errors "Error: %S"
(with-demoted-errors
(let ((exists (find-buffer-visiting file)))
(with-current-buffer (let ((enable-local-variables :safe)
(enable-local-eval nil))
@ -335,8 +326,7 @@ Returns non-nil if conflicts remain."
;; (pop-to-buffer (current-buffer)) (debug 'before-resolve)
))
;; Try to resolve the conflicts.
(let ((coding-system-for-read vc-git-log-output-coding-system)
temp)
(let (temp)
(cond
;; FIXME when merging release branch to master, we still
;; need to detect and handle the case where NEWS was modified
@ -402,10 +392,9 @@ is nil, only the single commit BEG is merged."
(if end "s were " " was ")
"skipped:\n\n")
""))
(let ((coding-system-for-read vc-git-log-output-coding-system))
(apply #'call-process "git" nil t nil "log" "--oneline"
(if end (list (concat beg "~.." end))
`("-1" ,beg))))
(apply #'call-process "git" nil t nil "log" "--oneline"
(if end (list (concat beg "~.." end))
`("-1" ,beg)))
(insert "\n")
;; Truncate to 72 chars so that the resulting ChangeLog line fits in 80.
(goto-char (point-min))
@ -419,9 +408,8 @@ MISSING must be a list of SHA1 strings."
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
(erase-buffer)
(let* ((skip (cdar missing))
(coding-system-for-read vc-git-log-output-coding-system)
(beg (car (pop missing)))
end commitmessage commitmessage1 commitmessage-file status)
end commitmessage)
;; Determine last revision with same boolean skip status.
(while (and missing
(eq (null (cdar missing))
@ -435,32 +423,12 @@ MISSING must be a list of SHA1 strings."
(if end (concat ".." (substring end 0 6)) ""))
(unless end
(setq end beg))
(when (eq system-type 'windows-nt)
;; Command lines on MS-Windows cannot include newlines.
;; Since "git merge" doesn't accept a -F FILE option, we
;; commit the merge with a shortened single-line log message,
;; and then invoke "git commit --amend" with the full log
;; message from a temporary file.
(setq commitmessage1
;; Make sure the commit message is at most a single line.
(car (split-string commitmessage "[\f\n\r\v]+")))
(setq commitmessage-file (make-nearby-temp-file "gitmerge-msg"))
(let ((coding-system-for-write vc-git-commits-coding-system))
(write-region commitmessage nil commitmessage-file nil 'silent)))
(unless (setq status
(zerop
(apply #'call-process "git" nil t nil "merge" "--no-ff"
(append (when skip '("-s" "ours"))
(if commitmessage-file
`("-m" ,commitmessage1 ,end)
`("-m" ,commitmessage ,end))))))
(unless (zerop
(apply #'call-process "git" nil t nil "merge" "--no-ff"
(append (when skip '("-s" "ours"))
`("-m" ,commitmessage ,end))))
(gitmerge-write-missing missing from)
(gitmerge-resolve-unmerged))
(when (and commitmessage-file (file-exists-p commitmessage-file))
(if status
(call-process "git" nil t nil
"commit" "--amend" "-F" commitmessage-file))
(delete-file commitmessage-file)))
(gitmerge-resolve-unmerged)))
missing))
(defun gitmerge-resolve-unmerged ()
@ -468,13 +436,12 @@ MISSING must be a list of SHA1 strings."
Throw an user-error if we cannot resolve automatically."
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
(erase-buffer)
(let ((coding-system-for-read vc-git-log-output-coding-system)
files conflicted)
(let (files conflicted)
;; List unmerged files
(if (not (zerop
(call-process "git" nil t nil
"diff" "--name-only" "--diff-filter=U")))
(error "Error listing unmerged files. Resolve manually.")
(error "Error listing unmerged files. Resolve manually.")
(goto-char (point-min))
(while (not (eobp))
(push (buffer-substring (point) (line-end-position)) files)
@ -512,19 +479,17 @@ Throw an user-error if we cannot resolve automatically."
(defun gitmerge-repo-clean ()
"Return non-nil if repository is clean."
(with-temp-buffer
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil
"diff" "--staged" "--name-only")
(call-process "git" nil t nil
"diff" "--name-only")
(zerop (buffer-size)))))
(zerop (buffer-size))))
(defun gitmerge-commit ()
"Commit, and return non-nil if it succeeds."
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(erase-buffer)
(eq 0 (call-process "git" nil t nil "commit" "--no-edit")))))
(erase-buffer)
(eq 0 (call-process "git" nil t nil "commit" "--no-edit"))))
(defun gitmerge-maybe-resume ()
"Check if we have to resume a merge.
@ -634,18 +599,12 @@ Branch FROM will be prepended to the list."
(with-current-buffer
(gitmerge-setup-log-buffer gitmerge--commits gitmerge--from)
(goto-char (point-min))
(insert (substitute-command-keys
(concat
(propertize "Commands: " 'font-lock-face 'bold)
"\\<gitmerge-mode-map>"
"(\\[gitmerge-toggle-skip]) Toggle skip, "
"(\\[gitmerge-show-log]) Show log, "
"(\\[gitmerge-show-diff]) Show diff, "
"(\\[gitmerge-show-files]) Show files, "
"(\\[gitmerge-start-merge]) Start merge\n"
(propertize "Flags: " 'font-lock-face 'bold)
"(C) Detected backport (cherry-mark), (R) Matches skip "
"regexp, (M) Manually picked\n\n")))
(insert (propertize "Commands: " 'font-lock-face 'bold)
"(s) Toggle skip, (l) Show log, (d) Show diff, "
"(f) Show files, (m) Start merge\n"
(propertize "Flags: " 'font-lock-face 'bold)
"(C) Detected backport (cherry-mark), (R) Log matches "
"regexp, (M) Manually picked\n\n")
(gitmerge-mode)
(pop-to-buffer (current-buffer))
(if noninteractive (gitmerge-start-merge))))))

View file

@ -31,11 +31,10 @@ top_builddir = @top_builddir@
-include ${top_builddir}/src/verbose.mk
# Prevent any settings in the user environment causing problems.
unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH
unexport EMACSDATA EMACSDOC EMACSPATH
EMACS = ${top_builddir}/src/emacs
emacs = "${EMACS}" -batch --no-site-file --no-site-lisp \
--eval '(setq load-prefer-newer t)'
emacs = EMACSLOADPATH= "${EMACS}" -batch --no-site-file --no-site-lisp --eval '(setq load-prefer-newer t)'
make_bovine = ${emacs} -l semantic/bovine/grammar -f bovine-batch-make-parser
make_wisent = ${emacs} -l semantic/wisent/grammar -f wisent-batch-make-parser

View file

@ -126,7 +126,7 @@ variable
: SET symbol insertable-string-list newline
(VARIABLE-TAG $2 nil $3)
| SET symbol number newline
;; This so a common error with priority works.
;; This so a common error w/ priority works.
;; Note that "number" still has a string value in the lexer.
(VARIABLE-TAG $2 nil (list $3))
| SHOW symbol newline

View file

@ -41,7 +41,7 @@
;;
;; will show you any references to `change-log-date-face' in the
;; *.el files in a new buffer (in Grep mode). Hopefully you see
;; only the obsolete declaration and can proceed with its removal.
;; only the obsolete declaration and can proceed w/ its removal.
;; If not, please DTRT and refrain from the removal until those
;; references are properly transitioned.
;;

View file

@ -33,7 +33,13 @@
### Code:
source "${0%/*}/emacs-shell-lib"
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
PN=${0##*/} # basename of script
usage ()
{
@ -88,7 +94,8 @@ OPTIND=1
[ -e admin/admin.el ] || die "admin/admin.el not found"
tempfile="$(emacs_mktemp)"
tempfile=/tmp/$PN.$$
trap "rm -f $tempfile 2> /dev/null" EXIT
[ "$continue" ] || rm -rf $outdir

View file

@ -52,12 +52,11 @@ General steps (for each step, check for possible errors):
./autogen.sh
./configure --with-native-compilation && make
For a release (as opposed to pretest), visit etc/NEWS and use the
"M-x emacs-news-delete-temporary-markers" command to delete any
left-over "---" and "+++" markers from etc/NEWS, as well as the
"Temporary note" section at the beginning of that file, and commit
etc/NEWS if it was modified. For a bug fix release (e.g. 28.2),
delete any empty headlines too.
For a release (as opposed to pretest), delete any left-over "---"
and "+++" markers from etc/NEWS, as well as the "Temporary note"
section at the beginning of that file, and commit etc/NEWS if it
was modified. For a bug fix release (e.g. 28.2), delete any empty
headlines too.
2. Regenerate the versioned ChangeLog.N and etc/AUTHORS files.
@ -68,25 +67,16 @@ General steps (for each step, check for possible errors):
PREFERRED_BRANCH = emacs-NN
where NN is the version on the release branch from which you are
producing the tarball. If NN is incorrect (which it usually is
when starting a pretest of a new major release), update
Makefile.in and re-run 'configure' to update Makefile.
producing the tarball. If NN is incorrect, update Makefile.in and
re-run 'configure' to update Makefile.
For the first pretest of a new major release, consider starting a
new top-level ChangeLog.N file if the last versioned ChangeLog.N
file is too large. A good point to start a new ChangeLog.N file
is when the last one gets larger than 1.5 MiB. If so, start a new
one by bumping N, and also update the line in top-level
Makefile.in which says
If the versioned ChangeLog.N file is too large, start a new one
by bumping N, and also update the line in top-level Makefile.in
which says
CHANGELOG_HISTORY_INDEX_MAX = N
by incrementing the value of N by 1; then regenerate Makefile.
After bumping N, you need to actually create and commit
ChangeLog.N with the updated N, otherwise "M-x authors" below will
fail. The easiest way of creating the new ChangeLog.N is to
rename the file ChangeLog (without the .N suffix) left over from
the last major release (it is usually unversioned) and commit it.
Now:
@ -108,12 +98,11 @@ General steps (for each step, check for possible errors):
the relevant entry. If a file was deleted or renamed, consider
adding an appropriate entry to variables authors-ignored-files,
authors-valid-file-names, or authors-renamed-files-alist in
authors.el. If some authors are "ignored", consider adding
entries to the author-aliases variable.
authors.el.
If necessary, repeat 'C-u M-x authors' after making those changes.
Save the "*Authors*" buffer as etc/AUTHORS.
Check the diff looks reasonable. Maybe add more entries to
Check the diff looks reasonable. Maybe add entries to
authors-ambiguous-files or authors-aliases, and repeat.
Commit any fixes to authors.el.
@ -160,13 +149,6 @@ General steps (for each step, check for possible errors):
4. autoreconf -i -I m4 --force
make bootstrap
The below script checks for any mistakes in the source text of
manual pages. Fix any errors and re-run the script to verify.
./admin/check-man-pages
Then do this:
make -C etc/refcards
make -C etc/refcards clean
@ -179,13 +161,7 @@ General steps (for each step, check for possible errors):
messages from TeX, but those seem to be harmless, as the result
looks just fine.)
5. Copy lisp/loaddefs.el to lisp/ldefs-boot.el. After copying, edit
ldefs-boot.el to add
;; no-byte-compile: t
to its file-local variables section, otherwise make-dist will
complain.
5. Copy lisp/loaddefs.el to lisp/ldefs-boot.el.
Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the files
changed by M-x set-version. Note that the set-version changes

View file

@ -23,39 +23,38 @@
# written by Paul Eggert
GNULIB_URL=https://git.savannah.gnu.org/git/gnulib.git
GNULIB_URL=git://git.savannah.gnu.org/gnulib.git
GNULIB_MODULES='
alignasof alloca-opt binary-io byteswap c-ctype c-strcase
alloca-opt binary-io byteswap c-ctype c-strcase
canonicalize-lgpl
careadlinkat close-stream copy-file-range
count-leading-zeros count-one-bits count-trailing-zeros
crypto/md5 crypto/md5-buffer
crypto/sha1-buffer crypto/sha256-buffer crypto/sha512-buffer
d-type diffseq double-slash-root dtoastr dtotimespec dup2
environ execinfo faccessat
environ execinfo explicit_bzero faccessat
fchmodat fcntl fcntl-h fdopendir file-has-acl
filemode filename filevercmp flexmember fpieee
free-posix fstatat fsusage fsync futimens
getloadavg getopt-gnu getrandom gettime gettimeofday gitlog-to-changelog
ieee754-h ignore-value intprops largefile libgmp lstat
manywarnings memmem-simple mempcpy memrchr memset_explicit
minmax mkostemp mktime
nanosleep nproc nstrftime
manywarnings memmem-simple mempcpy memrchr minmax mkostemp mktime
nproc nstrftime
pathmax pipe2 pselect pthread_sigmask
qcopy-acl readlink readlinkat regex
sig2str sigdescr_np socklen stat-time std-gnu11 stdbool stddef stdio
sig2str sigdescr_np socklen stat-time std-gnu11 stdalign stddef stdio
stpcpy strnlen strtoimax symlink sys_stat sys_time
tempname time-h time_r time_rz timegm timer-time timespec-add timespec-sub
tempname time time_r time_rz timegm timer-time timespec-add timespec-sub
update-copyright unlocked-io utimensat
vla warnings
'
AVOIDED_MODULES='
btowc chmod close crypto/af_alg dup fchdir fstat langinfo lock
btowc close crypto/af_alg dup fchdir fstat langinfo lock
mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
openat-die opendir pthread-h raise
save-cwd select setenv sigprocmask stat stdarg
save-cwd select setenv sigprocmask stat stdarg stdbool
threadlib tzset unsetenv utime utime-h
wchar wcrtomb wctype-h
'
@ -103,12 +102,6 @@ test -x "$gnulib_srcdir"/gnulib-tool || {
exit 1
}
# gnulib-tool has problems with a bare checkout (Bug#32452#65).
test -f configure || ./autogen.sh || exit
# Old caches can confuse autoconf when some Gnulib-related changes take effect.
rm -fr autom4te.cache || exit
avoided_flags=
for module in $AVOIDED_MODULES; do
avoided_flags="$avoided_flags --avoid=$module"
@ -116,9 +109,7 @@ done
"$gnulib_srcdir"/gnulib-tool --dir="$src" $GNULIB_TOOL_FLAGS \
$avoided_flags $GNULIB_MODULES &&
rm -- "$src"lib/gl_openssl.h \
"$src"lib/stdio-read.c "$src"lib/stdio-write.c \
"$src"m4/fcntl-o.m4 \
rm -- "$src"lib/gl_openssl.h "$src"m4/fcntl-o.m4 \
"$src"m4/gl-openssl.m4 \
"$src"m4/gnulib-cache.m4 "$src"m4/gnulib-tool.m4 \
"$src"m4/manywarnings-c++.m4 \

View file

@ -73,7 +73,7 @@ the ones that are not reproducible on the current release.
know if you are able to? If I don't hear back in a few
weeks, I'll just close this bug as unreproducible."
[ ] Check that the priority is reasonable. Most bugs should be
marked as normal, but crashes and security issues can be
marked as normal, but crashers and security issues can be
marked as serious.
3. Your changes will take some time to take effect. After a period of minutes
to hours, you will get a mail telling you the control message has been

View file

@ -3,7 +3,7 @@ NOTES ON THE EMACS PACKAGE ARCHIVE
The GNU Emacs package archive, at elpa.gnu.org, is managed using a Git
repository named "elpa", hosted on Savannah. To check it out:
git clone https://git.savannah.gnu.org/git/emacs/elpa
git clone git://git.sv.gnu.org/emacs/elpa
cd elpa
make setup

View file

@ -8,8 +8,7 @@ NOTES FOR EMACS CONTINUOUS BUILD ON EMBA
A continuous build for Emacs can be found at
<https://emba.gnu.org/emacs/emacs>, a Gitlab instance. It watches the
Emacs git repository and starts a pipeline (jobset) if there are new
changes. This happens for all Emacs branches which belong to the
defined workflow (see below).
changes. This happens for all Emacs branches.
* Mail notifications
@ -29,49 +28,29 @@ The messages contain a URL to the log file of the failed job, like
* Emacs jobset
The Emacs jobset is defined in the Emacs source tree, file
'.gitlab-ci.yml'. All related files are located in directory
'test/infra'. They could be adapted for every Emacs branch, see
'.gitlab-ci.yml'. It could be adapted for every Emacs branch, see
<https://emba.gnu.org/help/ci/yaml/README.md>.
Only branches whose name starts with 'master', 'emacs', 'feature', or
'fix' are considered. This is declared in the workflow rules of file
'test/infra/gitlab-ci.yml'.
A jobset on Gitlab is called a pipeline. Emacs pipelines run through
the stages 'build-images', 'platform-images' and 'native-comp-images'
(create an Emacs instance by 'make bootstrap' with different
configuration parameters) as well as 'normal', 'platforms' and
'native-comp' (run respective test jobs based on the produced images).
The jobs for stage 'normal' are contained in the file
'test/infra/test-jobs.yml'. This file is generated by calling 'make
-C test generate-test-jobs' in the Emacs source tree, and the
resulting file should be pushed to the Emacs git repository afterwards.
Every job runs in a Debian docker container. It uses the local clone
of the Emacs git repository to perform a bootstrap and test of Emacs.
This could happen for several jobs with changed configuration, compile,
This could happen for several jobs with changed configuration, compile
and test parameters.
The 'build-image-*' jobs of the different '*-images' stages run only
if there are severe changes in the Emacs sources, like in Makefiles
etc. Otherwise they are skipped, and the corresponding 'test-*' jobs
run just 'make -C test ...' in the respective Docker image from a
previous build run.
There are different types of jobs: 'prep-image-base' is responsible to
prepare the environment for the following jobs. 'build-image-*' jobs
are responsible to compile Emacs in different configuration. The
corresponding 'test-*' jobs run the ert tests.
Jobs in the 'build-images' and 'normal' stages are triggered by
changes of respective files in the Emacs git repository. All other
jobs run scheduled in a pipeline every 8 hours.
A special job is 'test-all-inotify', which runs 'make check-expensive'.
While most of the jobs run as soon as a respective file has been
committed into the Emacs git repository, this test job runs scheduled,
every 8 hours.
The log files for every test job are kept on the server for a week.
They can be downloaded from the server, visiting the URL
<https://emba.gnu.org/emacs/emacs/-/pipelines>, and selecting the job
in question.
Every pipeline generates a JUnit test report for the respective test
jobs, which can be inspected on the pipeline web page. This test
report counts completed ERT tests, aborted tests are not counted.
* Emba configuration
The emba configuration files are hosted on
@ -83,46 +62,6 @@ Lisp packages, Makefiles, scripts, and other software could determine
whether they run on emba by checking for the environment variable
EMACS_EMBA_CI.
* Running Emba tests locally
As usual in GitLab, the tests run in containers, which could be
applied also locally. Unfortunately, the Emba container registry,
emba.gnu.org:5050, is not accessible publicly. Instead, the container
images must be build locally. Change the current directory to a
recent Emacs branch, and apply the command
docker build --target emacs-inotify --tag emacs-inotify \
-f test/infra/Dockerfile.emba .
This creates the Debian-based image emacs-inotify, based on the
instructions in the file Dockerfile.emba. This image is good for the
majority of tests. However, there are also other image build
instructions like emacs-filenotify-gio, emacs-eglot, emacs-gnustep and
emacs-native-comp-speed{0,1,2}. Use the appropriate one.
The image contains a directory "/checkout", which is a copy of your
local Emacs git repository. Emacs has been built in this directory
via "make bootstrap". In order to use the image, start a container
like
docker run --interactive --env EMACS_EMBA_CI=1 --name emacs-inotify \
emacs-inotify /bin/sh -i
In this container, change the current directory to "/checkout". Now
you can apply all commands known for Emacs, like
cd /checkout
make -C test files-tests.log
While this container runs, you can also access its filesystem from
your local Emacs via Tramp. For example, in order to see the result
of the above test run, open the log file in your local Emacs with
C-x C-f /docker:emacs-inotify:/checkout/test/lisp/files-tests.log
Note: On local Red Hat-based systems, use "podman" instead of "docker"
in the shell commands and Tramp file names.
This file is part of GNU Emacs.

View file

@ -16,14 +16,14 @@ Initial setup
Then we want to clone the repository. We normally want to have both
the current master and (if there is one) the active release branch
(eg emacs-29).
(eg emacs-27).
mkdir ~/emacs
cd ~/emacs
git clone <membername>@git.sv.gnu.org:/srv/git/emacs.git master
cd master
git config push.default current
git worktree add ../emacs-29 emacs-29
git worktree add ../emacs-27 emacs-27
You now have both branches conveniently accessible, and you can do
"git pull" in them once in a while to keep updated.
@ -67,7 +67,7 @@ which will look like
commit 958b768a6534ae6e77a8547a56fc31b46b63710b
cd ~/emacs/emacs-29
cd ~/emacs/emacs-27
git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b
and add "Backport:" to the commit string. Then
@ -109,7 +109,7 @@ up-to-date by doing a pull. Then start Emacs with
emacs -l admin/gitmerge.el -f gitmerge
You'll be asked for the branch to merge, which will default to
(eg) 'origin/emacs-29', which you should accept. Merging a local tracking
(eg) 'origin/emacs-27', which you should accept. Merging a local tracking
branch is discouraged, since it might not be up-to-date, or worse,
contain commits from you which are not yet pushed upstream.

View file

@ -42,24 +42,6 @@ yet another fun excursion into the exciting world of version control.
https://lists.gnu.org/r/emacs-devel/2010-04/msg00086.html
* feature and scratch branches
Besides the master branch, which is where development takes place, and
the "emacs-NN" release branches, we also have branches whose names
start with "scratch/" and "feature/". The "feature/" prefix is used
for feature branches that are intended to live for some time, while
"scratch/" is for one-off throw-away-after-use branches.
We do not intend to "git merge" from scratch branches, so force-pushes
are tolerated, as well as commits with poor style, incomplete commit
messages, etc.
We do expect to "git merge" from feature branches so: no force push,
and no commits that don't have a proper commit message.
Automatic tests are run for feature/* branches on EMBA.
See: https://emba.gnu.org/emacs/emacs/-/pipelines
* Installing changes from gnulib
Some of the files in Emacs are copied from gnulib. To synchronize
@ -128,14 +110,6 @@ again.
This is a semi-automated way to find the revision that introduced a bug.
Browse 'git help bisect' for technical instructions.
It is recommended to start a bisection with the admin/git-bisect-start
script. Using that script ensures that commits in branches that are
the result of merging external trees into the Emacs repository, as
well as certain commits on which Emacs fails to build, are skipped
during the bisection process. That script can also be executed
automatically when 'git bisect start' is called, with the help of a
wrapper script that is included in its commentary section.
* Maintaining ChangeLog history
Older ChangeLog entries are kept in history files named ChangeLog.1,
@ -150,11 +124,6 @@ This ChangeLog file is not put into the repository.
'make change-history' copies all newer ChangeLog entries into the
start of the newest ChangeLog history file. These ChangeLog entries
are thereafter considered to be old, so later uses of 'make ChangeLog'
and/or 'make change-history' will no longer copy the entries.
To alter ChangeLog history, run 'make change-history' and commit the
changes made by that command. Then edit the ChangeLog history files
manually and commit those changes in a second, distinct commit.
Altering ChangeLog history like this can make things harder for those
who handle merging branches and Emacs releases, so reserve it for
correcting more serious mistakes.
and/or 'make change-history' will no longer copy the entries. To
alter ChangeLog history, run 'make change-history', then edit
the ChangeLog history files manually and commit your changes.

View file

@ -1,29 +0,0 @@
#!/bin/bash
languages=(
'bash'
'c'
'cmake'
'cpp'
'css'
'c-sharp'
'dockerfile'
'elixir'
'go'
'go-mod'
'heex'
'html'
'javascript'
'json'
'python'
'rust'
'toml'
'tsx'
'typescript'
'yaml'
)
for language in "${languages[@]}"
do
./build.sh $language
done

View file

@ -1,92 +0,0 @@
#!/bin/bash
lang=$1
topdir="$PWD"
case $(uname) in
"Darwin")
soext="dylib"
;;
*"MINGW"*)
soext="dll"
;;
*)
soext="so"
;;
esac
echo "Building ${lang}"
### Retrieve sources
org="tree-sitter"
repo="tree-sitter-${lang}"
sourcedir="tree-sitter-${lang}/src"
grammardir="tree-sitter-${lang}"
case "${lang}" in
"dockerfile")
org="camdencheek"
;;
"cmake")
org="uyha"
;;
"elixir")
org="elixir-lang"
;;
"go-mod")
# The parser is called "gomod".
lang="gomod"
org="camdencheek"
;;
"heex")
org="phoenixframework"
;;
"typescript")
sourcedir="tree-sitter-typescript/typescript/src"
grammardir="tree-sitter-typescript/typescript"
;;
"tsx")
repo="tree-sitter-typescript"
sourcedir="tree-sitter-typescript/tsx/src"
grammardir="tree-sitter-typescript/tsx"
;;
"yaml")
org="ikatyang"
;;
esac
git clone "https://github.com/${org}/${repo}.git" \
--depth 1 --quiet
cp "${grammardir}"/grammar.js "${sourcedir}"
# We have to go into the source directory to compile, because some
# C files refer to files like "../../common/scanner.h".
cd "${sourcedir}"
### Build
cc -fPIC -c -I. parser.c
# Compile scanner.c.
if test -f scanner.c
then
cc -fPIC -c -I. scanner.c
fi
# Compile scanner.cc.
if test -f scanner.cc
then
c++ -fPIC -I. -c scanner.cc
fi
# Link.
if test -f scanner.cc
then
c++ -fPIC -shared *.o -o "libtree-sitter-${lang}.${soext}"
else
cc -fPIC -shared *.o -o "libtree-sitter-${lang}.${soext}"
fi
### Copy out
mkdir -p "${topdir}/dist"
cp "libtree-sitter-${lang}.${soext}" "${topdir}/dist"
cd "${topdir}"
rm -rf "${repo}"

View file

@ -1,458 +0,0 @@
STARTER GUIDE ON WRITING MAJOR MODE WITH TREE-SITTER -*- org -*-
This document guides you on adding tree-sitter support to a major
mode.
TOC:
- Building Emacs with tree-sitter
- Install language definitions
- Setup
- Naming convention
- Font-lock
- Indent
- Imenu
- Navigation
- Which-func
- More features?
- Common tasks (code snippets)
- Manual
- Appendix 1
* Building Emacs with tree-sitter
You can either install tree-sitter by your package manager, or from
source:
git clone https://github.com/tree-sitter/tree-sitter.git
cd tree-sitter
make
make install
Then pull the tree-sitter branch (or the master branch, if it has
merged) and rebuild Emacs.
* Install language definitions
Tree-sitter by itself doesnt know how to parse any particular
language. We need to install language definitions (or “grammars”) for
a language to be able to parse it. There are a couple of ways to get
them.
You can use this script that I put together here:
https://github.com/casouri/tree-sitter-module
This script automatically pulls and builds language definitions for C,
C++, Rust, JSON, Go, HTML, JavaScript, CSS, Python, Typescript,
C#, etc. Better yet, I pre-built these language definitions for
GNU/Linux and macOS, they can be downloaded here:
https://github.com/casouri/tree-sitter-module/releases/tag/v2.1
To build them yourself, run
git clone git@github.com:casouri/tree-sitter-module.git
cd tree-sitter-module
./batch.sh
and language definitions will be in the /dist directory. You can
either copy them to standard dynamic library locations of your system,
eg, /usr/local/lib, or leave them in /dist and later tell Emacs where
to find language definitions by setting treesit-extra-load-path.
Language definition sources can be found on GitHub under
tree-sitter/xxx, like tree-sitter/tree-sitter-python. The tree-sitter
organization has all the "official" language definitions:
https://github.com/tree-sitter
Alternatively, you can use treesit-install-language-grammar command
and follow its instructions. If everything goes right, it should
automatically download and compile the language grammar for you.
* Setting up for adding major mode features
Start Emacs and load tree-sitter with
(require 'treesit)
Now check if Emacs is built with tree-sitter library
(treesit-available-p)
Make sure Emacs can find the language grammar you want to use
(treesit-language-available-p 'lang)
* Tree-sitter major modes
Tree-sitter modes should be separate major modes, so other modes
inheriting from the original mode don't break if tree-sitter is
enabled. For example js2-mode inherits js-mode, we can't enable
tree-sitter in js-mode, lest js-mode would not setup things that
js2-mode expects to inherit from. So it's best to use separate major
modes.
If the tree-sitter variant and the "native" variant could share some
setup, you can create a "base mode", which only contains the common
setup. For example, python.el defines python-base-mode (shared),
python-mode (native), and python-ts-mode (tree-sitter).
In the tree-sitter mode, check if we can use tree-sitter with
treesit-ready-p, it will error out if tree-sitter is not ready.
In Emacs 30 we'll introduce some mechanism to more gracefully inherit
modes and fallback to other modes.
* Naming convention
Use tree-sitter for text (documentation, comment), use treesit for
symbol (variable, function).
* Font-lock
Tree-sitter works like this: You provide a query made of patterns and
capture names, tree-sitter finds the nodes that match these patterns,
tag the corresponding capture names onto the nodes and return them to
you. The query function returns a list of (capture-name . node). For
font-lock, we use face names as capture names. And the captured node
will be fontified in their capture name.
The capture name could also be a function, in which case (NODE
OVERRIDE START END) is passed to the function for fontification. START
and END are the start and end of the region to be fontified. The
function should only fontify within that region. The function should
also allow more optional arguments with (&rest _), for future
extensibility. For OVERRIDE check out the docstring of
treesit-font-lock-rules.
** Query syntax
There are two types of nodes, named, like (identifier),
(function_definition), and anonymous, like "return", "def", "(",
"}". Parent-child relationship is expressed as
(parent (child) (child) (child (grand_child)))
Eg, an argument list (1, "3", 1) could be:
(argument_list "(" (number) (string) (number) ")")
Children could have field names in its parent:
(function_definition name: (identifier) type: (identifier))
Match any of the list:
["true" "false" "none"]
Capture names can come after any node in the pattern:
(parent (child) @child) @parent
The query above captures both parent and child.
["return" "continue" "break"] @keyword
The query above captures all the keywords with capture name
"keyword".
These are the common syntax, see all of them in the manual
("Parsing Program Source" section).
** Query references
But how do one come up with the queries? Take python for an example,
open any python source file, type M-x treesit-explore-mode RET. Now
you should see the parse-tree in a separate window, automatically
updated as you select text or edit the buffer. Besides this, you can
consult the grammar of the language definition. For example, Pythons
grammar file is at
https://github.com/tree-sitter/tree-sitter-python/blob/master/grammar.js
Neovim also has a bunch of queries to reference:
https://github.com/nvim-treesitter/nvim-treesitter/tree/master/queries
The manual explains how to read grammar files in the bottom of section
"Tree-sitter Language Definitions".
** Debugging queries
If your query has problems, use treesit-query-validate to debug the
query. It will pop a buffer containing the query (in text format) and
mark the offending part in red.
** Code
To enable tree-sitter font-lock, set treesit-font-lock-settings and
treesit-font-lock-feature-list buffer-locally and call
treesit-major-mode-setup. For example, see
python--treesit-settings in python.el. Below is a snippet of it.
Just like the current font-lock, if the to-be-fontified region already
has a face (ie, an earlier match fontified part/all of the region),
the new face is discarded rather than applied. If you want later
matches always override earlier matches, use the :override keyword.
Each rule should have a :feature, like function-name,
string-interpolation, builtin, etc. Users can then enable/disable each
feature individually. See Appendix 1 at the bottom for a set of common
features names.
#+begin_src elisp
(defvar python--treesit-settings
(treesit-font-lock-rules
:feature 'comment
:language 'python
'((comment) @font-lock-comment-face)
:feature 'string
:language 'python
'((string) @font-lock-string-face
(string) @contextual) ; Contextual special treatment.
:feature 'function-name
:language 'python
'((function_definition
name: (identifier) @font-lock-function-name-face))
:feature 'class-name
:language 'python
'((class_definition
name: (identifier) @font-lock-type-face))
...))
#+end_src
Then in python-mode, enable tree-sitter font-lock:
#+begin_src elisp
(treesit-parser-create 'python)
(setq-local treesit-font-lock-settings python--treesit-settings)
(setq-local treesit-font-lock-feature-list
'((comment string function-name)
(class-name keyword builtin)
(string-interpolation decorator)))
...
(treesit-major-mode-setup)
#+end_src
Concretely, something like this:
#+begin_src elisp
(define-derived-mode python-mode prog-mode "Python"
...
(cond
;; Tree-sitter.
((treesit-ready-p 'python)
(treesit-parser-create 'python)
(setq-local treesit-font-lock-settings python--treesit-settings)
(setq-local treesit-font-lock-feature-list
'((comment string function-name)
(class-name keyword builtin)
(string-interpolation decorator)))
(treesit-major-mode-setup))
(t
;; No tree-sitter, do nothing or fallback to another mode.
...)))
#+end_src
* Indent
Indent works like this: We have a bunch of rules that look like
(MATCHER ANCHOR OFFSET)
When the indentation process starts, point is at the BOL of a line, we
want to know which column to indent this line to. Let NODE be the node
at point, we pass this node to the MATCHER of each rule, one of them
will match the node (eg, "this node is a closing bracket!"). Then we
pass the node to the ANCHOR, which returns a point, eg, the BOL of the
previous line. We find the column number of that point (eg, 4), add
OFFSET to it (eg, 0), and that is the column we want to indent the
current line to (4 + 0 = 4).
Matchers and anchors are functions that takes (NODE PARENT BOL &rest
_). Matches return nil/non-nil for no match/match, and anchors return
the anchor point. Below are some convenient builtin matchers and anchors.
For MATCHER we have
(parent-is TYPE) => matches if PARENTs type matches TYPE as regexp
(node-is TYPE) => matches NODEs type
(query QUERY) => matches if querying PARENT with QUERY
captures NODE.
(match NODE-TYPE PARENT-TYPE NODE-FIELD
NODE-INDEX-MIN NODE-INDEX-MAX)
=> checks everything. If an argument is nil, dont match that. Eg,
(match nil TYPE) is the same as (parent-is TYPE)
For ANCHOR we have
first-sibling => start of the first sibling
parent => start of parent
parent-bol => BOL of the line parent is on.
standalone-parent => Like parent-bol but handles more edge cases
prev-sibling => start of previous sibling
no-indent => current position (dont indent)
prev-line => start of previous line
There is also a manual section for indent: "Parser-based Indentation".
When writing indent rules, you can use treesit-check-indent to
check if your indentation is correct. To debug what went wrong, set
treesit--indent-verbose to non-nil. Then when you indent, Emacs
tells you which rule is applied in the echo area.
#+begin_src elisp
(defvar typescript-mode-indent-rules
(let ((offset typescript-indent-offset))
`((typescript
;; This rule matches if node at point is "}", ANCHOR is the
;; parent nodes BOL, and offset is 0.
((node-is "}") parent-bol 0)
((node-is ")") parent-bol 0)
((node-is "]") parent-bol 0)
((node-is ">") parent-bol 0)
((node-is "\\.") parent-bol ,offset)
((parent-is "ternary_expression") parent-bol ,offset)
((parent-is "named_imports") parent-bol ,offset)
((parent-is "statement_block") parent-bol ,offset)
((parent-is "type_arguments") parent-bol ,offset)
((parent-is "variable_declarator") parent-bol ,offset)
((parent-is "arguments") parent-bol ,offset)
((parent-is "array") parent-bol ,offset)
((parent-is "formal_parameters") parent-bol ,offset)
((parent-is "template_substitution") parent-bol ,offset)
((parent-is "object_pattern") parent-bol ,offset)
((parent-is "object") parent-bol ,offset)
((parent-is "object_type") parent-bol ,offset)
((parent-is "enum_body") parent-bol ,offset)
((parent-is "arrow_function") parent-bol ,offset)
((parent-is "parenthesized_expression") parent-bol ,offset)
...))))
#+end_src
To setup indentation for your major mode, set
treesit-simple-indent-rules to your rules, and call
treesit-major-mode-setup:
#+begin_src elisp
(setq-local treesit-simple-indent-rules typescript-mode-indent-rules)
(treesit-major-mode-setup)
#+end_src
* Imenu
Set treesit-simple-imenu-settings and call
treesit-major-mode-setup.
* Navigation
Set treesit-defun-type-regexp and call
treesit-major-mode-setup. You can additionally set
treesit-defun-name-function.
* Which-func
If you have an imenu implementation, set which-func-functions to
nil, and which-func will automatically use imenus data.
If you want an independent implementation for which-func, you can
find the current function by treesit-defun-at-point.
* More features?
Obviously this list is just a starting point, if there are features in
the major mode that would benefit from a parse tree, adding tree-sitter
support for that would be great. But in the minimal case, just adding
font-lock is awesome.
* Common tasks
How to...
** Get the buffer text corresponding to a node?
(treesit-node-text node)
BTW treesit-node-string does different things.
** Scan the whole tree for stuff?
(treesit-search-subtree)
(treesit-search-forward)
(treesit-induce-sparse-tree)
** Move to next node that...?
(treesit-search-forward-goto)
** Get the root node?
(treesit-buffer-root-node)
** Get the node at point?
(treesit-node-at (point))
* Manual
I suggest you read the manual section for tree-sitter in Info. The
section is Parsing Program Source. Typing
C-h i d m elisp RET g Parsing Program Source RET
will bring you to that section. You dont need to read through every
sentence, just read the text paragraphs and glance over function
names.
* Appendix 1
Below is a set of common features used by built-in major mode.
Basic tokens:
delimiter ,.; (delimit things)
operator == != || (produces a value)
bracket []{}()
misc-punctuation (other punctuation that you want to highlight)
constant true, false, null
number
keyword
comment (includes doc-comments)
string (includes chars and docstrings)
string-interpolation f"text {variable}"
escape-sequence "\n\t\\"
function every function identifier
variable every variable identifier
type every type identifier
property a.b <--- highlight b
key { a: b, c: d } <--- highlight a, c
error highlight parse error
Abstract features:
assignment: the LHS of an assignment (thing being assigned to), eg:
a = b <--- highlight a
a.b = c <--- highlight b
a[1] = d <--- highlight a
definition: the thing being defined, eg:
int a(int b) { <--- highlight a
return 0
}
int a; <-- highlight a
struct a { <--- highlight a
int b; <--- highlight b
}

View file

@ -1,50 +0,0 @@
NOTES ON TREESIT_RECORD_CHANGE
It is vital that Emacs informs tree-sitter of every change made to the
buffer, lest tree-sitter's parse tree would be corrupted/out of sync.
All buffer changes in Emacs are made through functions in insdel.c
(and casefiddle.c), I augmented functions in those files with calls to
treesit_record_change. Below is a manifest of all the relevant
functions in insdel.c as of Emacs 29:
Function Calls
----------------------------------------------------------------------
copy_text (*1)
insert insert_1_both
insert_and_inherit insert_1_both
insert_char insert
insert_string insert
insert_before_markers insert_1_both
insert_before_markers_and_inherit insert_1_both
insert_1_both treesit_record_change
insert_from_string insert_from_string_1
insert_from_string_before_markers insert_from_string_1
insert_from_string_1 treesit_record_change
insert_from_gap_1 treesit_record_change
insert_from_gap insert_from_gap_1
insert_from_buffer treesit_record_change
insert_from_buffer_1 (used by insert_from_buffer) (*2)
replace_range treesit_record_change
replace_range_2 (caller needs to call treesit_r_c)
del_range del_range_1
del_range_1 del_range_2
del_range_byte del_range_2
del_range_both del_range_2
del_range_2 treesit_record_change
(*1) This functions is used only to copy from string to string when
used outside of insdel.c, and when used inside insdel.c, the caller
calls treesit_record_change.
(*2) This function is a static function, and insert_from_buffer is its
only caller. So it should be fine to call treesit_record_change in
insert_from_buffer but not insert_from_buffer_1. I also left a
reminder comment.
As for casefiddle.c, do_casify_unibyte_region and
do_casify_multibyte_region modifies buffer, but they are static
functions and are called by casify_region, which calls
treesit_record_change. Other higher-level functions calls
casify_region to do the work.

View file

@ -15,33 +15,18 @@ Emacs uses the following files from the Unicode Character Database
. BidiMirroring.txt
. IVD_Sequences.txt
. NormalizationTest.txt
. PropertyValueAliases.txt
. ScriptExtensions.txt
. Scripts.txt
. SpecialCasing.txt
. confusables.txt
. emoji-data.txt
. emoji-zwj-sequences.txt
. emoji-sequences.txt
. BidiCharacterTest.txt
Emacs also uses the file emoji-test.txt which should be imported from
the Unicode's Public/emoji/ directory, and IdnaMappingTable.txt from
the Public/idna/ directory.
First, the first 14 files, emoji-test.txt and IdnaMappingTable.txt
need to be copied into admin/unidata/, and the file
https://www.unicode.org/copyright.html should be copied over
First, the first 10 files need to be copied into admin/unidata/, and
the file https://www.unicode.org/copyright.html should be copied over
copyright.html in admin/unidata (some of them might need trailing
whitespace removed before they can be committed to the Emacs
repository).
Next, review the assignment of default values of the Bidi Class
property to blocks in the file extracted/DerivedBidiClass.txt from the
UCD (search for "unassigned" in that file). Any changes should be
reflected in the unidata-gen.el file, where it sets up the default
values around line 210.
Then Emacs should be rebuilt for them to take effect. Rebuilding
Emacs updates several derived files elsewhere in the Emacs source
tree, mainly in lisp/international/.

View file

@ -10,10 +10,9 @@ results for plausibility, then commit them.
A few known problems with the build-aux/update-copyright script:
. it doesn't update config.bat, msdos/depfiles.bat,
nt/configure.bat, etc/tutorials/TUTORIAL.cn,
etc/tutorials/TUTORIAL.el_GR, and etc/tutorials/TUTORIAL.he
because the "Copyright" statement begins in these files
after a prefix that is more than 5 characters long
nt/configure.bat, etc/tutorials/TUTORIAL.cn, and
etc/tutorials/TUTORIAL.he because the "Copyright" statement begins
in these files after a prefix that is more than 5 characters long
. it doesn't update etc/tutorials/TUTORIAL.nl and
etc/tutorials/TUTORIAL.ro for some reason
. it doesn't update the second Copyright notice, the one that gets

View file

@ -131,7 +131,7 @@ The process is the same as for building from the master branch, except
that the release branch should already exist as a worktree, and the
version number must be added to the command line with `build-zips.sh
-V 27 -s`. The final zips will be named after the branch rather than
the version (e.g emacs-27-2019-12-26.zip) rather than the Emacs
the version (e.g emacs-27-2019-12-26.zip) rather than than the Emacs
version (e.g emacs-27.0.50.zip).

View file

@ -20,8 +20,6 @@
import os
import shutil
import re
import functools
import operator
from subprocess import check_output
@ -114,7 +112,7 @@ def ntldd_munge(out):
## Packages to fiddle with
## Source for gcc-libs is part of gcc
SKIP_SRC_PKGS=["mingw-w64-gcc-libs"]
SKIP_DEP_PKGS=frozenset(["mingw-w64-x86_64-glib2"])
SKIP_DEP_PKGS=["mingw-w64-glib2"]
MUNGE_SRC_PKGS={"mingw-w64-libwinpthread-git":"mingw-w64-winpthreads-git"}
MUNGE_DEP_PKGS={
"mingw-w64-x86_64-libwinpthread":"mingw-w64-x86_64-libwinpthread-git",
@ -123,17 +121,19 @@ def ntldd_munge(out):
## Currently no packages seem to require this!
ARCH_PKGS=[]
SRC_REPO="https://repo.msys2.org/mingw/sources"
SRC_REPO="https://sourceforge.net/projects/msys2/files/REPOS/MINGW/Sources"
def immediate_deps(pkgs):
package_info = check_output(["pacman", "-Si"] + pkgs).decode("utf-8").splitlines()
def immediate_deps(pkg):
package_info = check_output(["pacman", "-Si", pkg]).decode("utf-8").split("\n")
## Extract the packages listed for "Depends On:" lines.
dependencies = [line.split(":")[1].split() for line in package_info
if line.startswith("Depends On")]
## Flatten dependency lists from multiple packages into one list.
dependencies = functools.reduce(operator.iconcat, dependencies, [])
## Extract the "Depends On" line
depends_on = [x for x in package_info if x.startswith("Depends On")][0]
## Remove "Depends On" prefix
dependencies = depends_on.split(":")[1]
## Split into dependencies
dependencies = dependencies.strip().split(" ")
## Remove > signs TODO can we get any other punctuation here?
dependencies = [d.split(">")[0] for d in dependencies if d]
@ -149,18 +149,16 @@ def extract_deps():
print( "Extracting deps" )
# Get a list of all dependencies needed for packages mentioned above.
pkgs = set(PKG_REQ)
newdeps = pkgs
print("adding...")
while True:
subdeps = frozenset(immediate_deps(list(newdeps)))
newdeps = subdeps - SKIP_DEP_PKGS - pkgs
if not newdeps:
break
print('\n'.join(newdeps))
pkgs |= newdeps
pkgs = PKG_REQ[:]
n = 0
while n < len(pkgs):
subdeps = immediate_deps(pkgs[n])
for p in subdeps:
if not (p in pkgs or p in SKIP_DEP_PKGS):
pkgs.append(p)
n = n + 1
return list(pkgs)
return sorted(pkgs)
def download_source(tarball):
@ -169,7 +167,7 @@ def download_source(tarball):
if not os.path.exists("../emacs-src-cache/{}".format(tarball)):
print("Downloading {}...".format(tarball))
check_output_maybe(
"wget -a ../download.log -O ../emacs-src-cache/{} {}/{}"
"wget -a ../download.log -O ../emacs-src-cache/{} {}/{}/download"
.format(tarball, SRC_REPO, tarball),
shell=True
)
@ -257,7 +255,7 @@ def clean():
if( args.l ):
print("List of dependencies")
print( deps )
print( extract_deps() )
exit(0)
if args.s:

View file

@ -148,7 +148,7 @@ done
if [ -z $ACTUAL_VERSION ];
then
ACTUAL_VERSION=`
sed -n 's/^AC_INIT(\[*GNU Emacs]*,[ ]*\[*\([^] ,)]*\).*/\1/p' < ../../../configure.ac
sed -n 's/^AC_INIT(GNU Emacs,[ ]*\([^ ,)]*\).*/\1/p' < ../../../configure.ac
`
fi

View file

@ -172,10 +172,10 @@ test x"$prefix" = x && { prefix="`get_config_var prefix`" || exit 4 ; }
test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; }
VERSION=`
sed -n 's/^AC_INIT([ ]*\[*emacs]*[ ]*,[ ]*\[*\([^] ),]*\).*/\1/p' <$SRC/configure.ac
sed -n 's/^AC_INIT([ ]*emacs[ ]*,[ ]*\([^ ),]*\).*/\1/p' <$SRC/configure.ac
` || exit 4
test -n "$VERSION" || VERSION=`
sed -n 's/^AC_INIT([ ]*\[*GNU Emacs]*[ ]*,[ ]*\[*\([^] ),]*\).*/\1/p' <$SRC/configure.ac
sed -n 's/^AC_INIT([ ]*GNU Emacs[ ]*,[ ]*\([^ ),]*\).*/\1/p' <$SRC/configure.ac
` || exit 4
test -n "$VERSION" || { printf '%s\n' >&2 "$me: no version in configure.ac"; exit 4; }

View file

@ -1,6 +1,6 @@
# BidiBrackets-15.0.0.txt
# Date: 2022-05-03, 18:42:00 GMT [AG, LI, KW]
# © 2022 Unicode®, Inc.
# BidiBrackets-14.0.0.txt
# Date: 2021-06-30, 23:59:00 GMT [AG, LI, KW]
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
#

View file

@ -1,6 +1,6 @@
# BidiMirroring-15.0.0.txt
# Date: 2022-05-03, 18:47:00 GMT [KW, RP]
# © 2022 Unicode®, Inc.
# BidiMirroring-14.0.0.txt
# Date: 2021-08-08, 22:55:00 GMT [KW, RP]
# © 2021 Unicode®, Inc.
# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
@ -15,7 +15,7 @@
# value, for which there is another Unicode character that typically has a glyph
# that is the mirror image of the original character's glyph.
#
# The repertoire covered by the file is Unicode 15.0.0.
# The repertoire covered by the file is Unicode 14.0.0.
#
# The file contains a list of lines with mappings from one code point
# to another one for character-based mirroring.

View file

@ -1,10 +1,10 @@
# Blocks-15.0.0.txt
# Date: 2022-01-28, 20:58:00 GMT [KW]
# © 2022 Unicode®, Inc.
# For terms of use, see https://www.unicode.org/terms_of_use.html
# Blocks-14.0.0.txt
# Date: 2021-01-22, 23:29:00 GMT [KW]
# © 2021 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see https://www.unicode.org/reports/tr44/
# For documentation, see http://www.unicode.org/reports/tr44/
#
# Format:
# Start Code..End Code; Block Name
@ -15,7 +15,7 @@
# and underbars are ignored.
# For example, "Latin Extended-A" and "latin extended a" are equivalent.
# For more information on the comparison of property values,
# see UAX #44: https://www.unicode.org/reports/tr44/
# see UAX #44: http://www.unicode.org/reports/tr44/
#
# All block ranges start with a value where (cp MOD 16) = 0,
# and end with a value where (cp MOD 16) = 15. In other words,
@ -241,7 +241,6 @@ FFF0..FFFF; Specials
10D00..10D3F; Hanifi Rohingya
10E60..10E7F; Rumi Numeral Symbols
10E80..10EBF; Yezidi
10EC0..10EFF; Arabic Extended-C
10F00..10F2F; Old Sogdian
10F30..10F6F; Sogdian
10F70..10FAF; Old Uyghur
@ -273,13 +272,11 @@ FFF0..FFFF; Specials
11A50..11AAF; Soyombo
11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
11AC0..11AFF; Pau Cin Hau
11B00..11B5F; Devanagari Extended-A
11C00..11C6F; Bhaiksuki
11C70..11CBF; Marchen
11D00..11D5F; Masaram Gondi
11D60..11DAF; Gunjala Gondi
11EE0..11EFF; Makasar
11F00..11F5F; Kawi
11FB0..11FBF; Lisu Supplement
11FC0..11FFF; Tamil Supplement
12000..123FF; Cuneiform
@ -287,7 +284,7 @@ FFF0..FFFF; Specials
12480..1254F; Early Dynastic Cuneiform
12F90..12FFF; Cypro-Minoan
13000..1342F; Egyptian Hieroglyphs
13430..1345F; Egyptian Hieroglyph Format Controls
13430..1343F; Egyptian Hieroglyph Format Controls
14400..1467F; Anatolian Hieroglyphs
16800..16A3F; Bamum Supplement
16A40..16A6F; Mro
@ -312,7 +309,6 @@ FFF0..FFFF; Specials
1D000..1D0FF; Byzantine Musical Symbols
1D100..1D1FF; Musical Symbols
1D200..1D24F; Ancient Greek Musical Notation
1D2C0..1D2DF; Kaktovik Numerals
1D2E0..1D2FF; Mayan Numerals
1D300..1D35F; Tai Xuan Jing Symbols
1D360..1D37F; Counting Rod Numerals
@ -320,11 +316,9 @@ FFF0..FFFF; Specials
1D800..1DAAF; Sutton SignWriting
1DF00..1DFFF; Latin Extended-G
1E000..1E02F; Glagolitic Supplement
1E030..1E08F; Cyrillic Extended-D
1E100..1E14F; Nyiakeng Puachue Hmong
1E290..1E2BF; Toto
1E2C0..1E2FF; Wancho
1E4D0..1E4FF; Nag Mundari
1E7E0..1E7FF; Ethiopic Extended-B
1E800..1E8DF; Mende Kikakui
1E900..1E95F; Adlam
@ -354,7 +348,6 @@ FFF0..FFFF; Specials
2CEB0..2EBEF; CJK Unified Ideographs Extension F
2F800..2FA1F; CJK Compatibility Ideographs Supplement
30000..3134F; CJK Unified Ideographs Extension G
31350..323AF; CJK Unified Ideographs Extension H
E0000..E007F; Tags
E0100..E01EF; Variation Selectors Supplement
F0000..FFFFF; Supplementary Private Use Area-A

View file

@ -2,9 +2,6 @@
#
# History:
#
# 2022-09-13 Registration of additional sequences in the Adobe-Japan1
# collection.
#
# 2020-11-06 Registration of additional sequences in the MSARG
# collection.
#
@ -35,7 +32,7 @@
# For more details on the IVD, see UTS #37:
# https://www.unicode.org/reports/tr37/
#
# Copyright 2006-2022 Unicode, Inc.
# Copyright 2006-2020 Unicode, Inc.
# For terms of use, see: https://www.unicode.org/copyright.html#8
#
3402 E0100; Adobe-Japan1; CID+13698
@ -39340,5 +39337,4 @@ FA29 E0100; Adobe-Japan1; CID+8687
2EB71 E0101; Moji_Joho; MJ059252
2EB79 E0100; Moji_Joho; MJ059255
2EB79 E0101; Moji_Joho; MJ059256
31350 E0100; Adobe-Japan1; CID+19130
# EOF

File diff suppressed because it is too large Load diff

View file

@ -29,9 +29,6 @@ srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
# Prevent any settings in the user environment causing problems.
unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH
EMACS = ${top_builddir}/src/emacs
unidir = ${top_srcdir}/lisp/international
emacs = "${EMACS}" -batch --no-site-file --no-site-lisp
@ -44,9 +41,7 @@ unifiles = $(addprefix ${unidir}/,$(sort $(shell sed -n 's/^[ \t][ \t]*${lparen}
.PHONY: all
all: ${top_srcdir}/src/macuvs.h ${unifiles} ${unidir}/charscript.el \
${unidir}/charprop.el ${unidir}/emoji-zwj.el ${unidir}/emoji-labels.el \
${unidir}/uni-scripts.el ${unidir}/uni-confusable.el \
${unidir}/idna-mapping.el
${unidir}/charprop.el ${unidir}/emoji-zwj.el
## Specify .elc as an order-only prereq so as to not needlessly rebuild
## target just because the .elc is missing.
@ -68,38 +63,18 @@ unidata.txt: ${srcdir}/UnicodeData.txt
## pretend that it does since other Makefiles assume that if charprop
## is up-to-date, the unifiles are too.
${unidir}/charprop.el: ${unifiles} ${srcdir}/unidata-gen.el | ${srcdir}/unidata-gen.elc
$(AM_V_GEN)[ ! -f $@ ] || chmod +w $@
$(AM_V_at)${emacs} -L ${srcdir} -l unidata-gen \
$(AM_V_at)[ ! -f $@ ] || chmod +w $@
$(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \
-f unidata-gen-charprop $@
${unifiles}: ${srcdir}/unidata-gen.el \
${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \
${srcdir}/BidiBrackets.txt | \
${srcdir}/unidata-gen.elc unidata.txt
$(AM_V_GEN)[ ! -f $@ ] || chmod +w $@
$(AM_V_at)${emacs} -L ${srcdir} -l unidata-gen \
$(AM_V_at)[ ! -f $@ ] || chmod +w $@
$(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \
-f unidata-gen-file $@ ${srcdir}
${unidir}/emoji-labels.el: ${unidir}/../international/emoji.el \
${srcdir}/emoji-test.txt
$(AM_V_GEN)${emacs} -l emoji.el -f emoji--generate-file $@
${unidir}/uni-scripts.el: ${srcdir}/unidata-gen.el \
${srcdir}/Scripts.txt \
${srcdir}/ScriptExtensions.txt \
${srcdir}/PropertyValueAliases.txt
$(AM_V_GEN)${emacs} -L ${srcdir} \
-l unidata-gen.el -f unidata-gen-scripts $@
${unidir}/uni-confusable.el: ${srcdir}/unidata-gen.el \
${srcdir}/confusables.txt
$(AM_V_GEN)${emacs} -L ${srcdir} \
-l unidata-gen.el -f unidata-gen-confusable $@
${unidir}/idna-mapping.el: ${srcdir}/unidata-gen.el \
${srcdir}/IdnaMappingTable.txt
$(AM_V_GEN)${emacs} -L ${srcdir} \
-l unidata-gen.el -f unidata-gen-idna-mapping $@
.PHONY: charscript.el
charscript.el: ${unidir}/charscript.el
@ -138,8 +113,7 @@ gen-clean:
rm -f ${unidir}/charscript.el*
rm -f ${unidir}/emoji-zwj.el*
rm -f ${unifiles} ${unidir}/charprop.el
rm -f ${unidir}/emoji-labels.el ${unidir}/idna-mapping.el \
${unidir}/uni-confusable.el ${unidir}/uni-scripts.el
## ref: https://lists.gnu.org/r/emacs-devel/2013-11/msg01029.html
maintainer-clean: gen-clean distclean

View file

@ -1,11 +1,11 @@
# NormalizationTest-15.0.0.txt
# Date: 2022-04-02, 01:29:09 GMT
# © 2022 Unicode®, Inc.
# NormalizationTest-14.0.0.txt
# Date: 2021-05-28, 21:49:12 GMT
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see https://www.unicode.org/reports/tr44/
# For documentation, see http://www.unicode.org/reports/tr44/
#
# Normalization Test Suite
# Format:
@ -16208,68 +16208,6 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
1D7FD;1D7FD;1D7FD;0037;0037; # (𝟽; 𝟽; 𝟽; 7; 7; ) MATHEMATICAL MONOSPACE DIGIT SEVEN
1D7FE;1D7FE;1D7FE;0038;0038; # (𝟾; 𝟾; 𝟾; 8; 8; ) MATHEMATICAL MONOSPACE DIGIT EIGHT
1D7FF;1D7FF;1D7FF;0039;0039; # (𝟿; 𝟿; 𝟿; 9; 9; ) MATHEMATICAL MONOSPACE DIGIT NINE
1E030;1E030;1E030;0430;0430; # (𞀰; 𞀰; 𞀰; а; а; ) MODIFIER LETTER CYRILLIC SMALL A
1E031;1E031;1E031;0431;0431; # (𞀱; 𞀱; 𞀱; б; б; ) MODIFIER LETTER CYRILLIC SMALL BE
1E032;1E032;1E032;0432;0432; # (𞀲; 𞀲; 𞀲; в; в; ) MODIFIER LETTER CYRILLIC SMALL VE
1E033;1E033;1E033;0433;0433; # (𞀳; 𞀳; 𞀳; г; г; ) MODIFIER LETTER CYRILLIC SMALL GHE
1E034;1E034;1E034;0434;0434; # (𞀴; 𞀴; 𞀴; д; д; ) MODIFIER LETTER CYRILLIC SMALL DE
1E035;1E035;1E035;0435;0435; # (𞀵; 𞀵; 𞀵; е; е; ) MODIFIER LETTER CYRILLIC SMALL IE
1E036;1E036;1E036;0436;0436; # (𞀶; 𞀶; 𞀶; ж; ж; ) MODIFIER LETTER CYRILLIC SMALL ZHE
1E037;1E037;1E037;0437;0437; # (𞀷; 𞀷; 𞀷; з; з; ) MODIFIER LETTER CYRILLIC SMALL ZE
1E038;1E038;1E038;0438;0438; # (𞀸; 𞀸; 𞀸; и; и; ) MODIFIER LETTER CYRILLIC SMALL I
1E039;1E039;1E039;043A;043A; # (𞀹; 𞀹; 𞀹; к; к; ) MODIFIER LETTER CYRILLIC SMALL KA
1E03A;1E03A;1E03A;043B;043B; # (𞀺; 𞀺; 𞀺; л; л; ) MODIFIER LETTER CYRILLIC SMALL EL
1E03B;1E03B;1E03B;043C;043C; # (𞀻; 𞀻; 𞀻; м; м; ) MODIFIER LETTER CYRILLIC SMALL EM
1E03C;1E03C;1E03C;043E;043E; # (𞀼; 𞀼; 𞀼; о; о; ) MODIFIER LETTER CYRILLIC SMALL O
1E03D;1E03D;1E03D;043F;043F; # (𞀽; 𞀽; 𞀽; п; п; ) MODIFIER LETTER CYRILLIC SMALL PE
1E03E;1E03E;1E03E;0440;0440; # (𞀾; 𞀾; 𞀾; р; р; ) MODIFIER LETTER CYRILLIC SMALL ER
1E03F;1E03F;1E03F;0441;0441; # (𞀿; 𞀿; 𞀿; с; с; ) MODIFIER LETTER CYRILLIC SMALL ES
1E040;1E040;1E040;0442;0442; # (𞁀; 𞁀; 𞁀; т; т; ) MODIFIER LETTER CYRILLIC SMALL TE
1E041;1E041;1E041;0443;0443; # (𞁁; 𞁁; 𞁁; у; у; ) MODIFIER LETTER CYRILLIC SMALL U
1E042;1E042;1E042;0444;0444; # (𞁂; 𞁂; 𞁂; ф; ф; ) MODIFIER LETTER CYRILLIC SMALL EF
1E043;1E043;1E043;0445;0445; # (𞁃; 𞁃; 𞁃; х; х; ) MODIFIER LETTER CYRILLIC SMALL HA
1E044;1E044;1E044;0446;0446; # (𞁄; 𞁄; 𞁄; ц; ц; ) MODIFIER LETTER CYRILLIC SMALL TSE
1E045;1E045;1E045;0447;0447; # (𞁅; 𞁅; 𞁅; ч; ч; ) MODIFIER LETTER CYRILLIC SMALL CHE
1E046;1E046;1E046;0448;0448; # (𞁆; 𞁆; 𞁆; ш; ш; ) MODIFIER LETTER CYRILLIC SMALL SHA
1E047;1E047;1E047;044B;044B; # (𞁇; 𞁇; 𞁇; ы; ы; ) MODIFIER LETTER CYRILLIC SMALL YERU
1E048;1E048;1E048;044D;044D; # (𞁈; 𞁈; 𞁈; э; э; ) MODIFIER LETTER CYRILLIC SMALL E
1E049;1E049;1E049;044E;044E; # (𞁉; 𞁉; 𞁉; ю; ю; ) MODIFIER LETTER CYRILLIC SMALL YU
1E04A;1E04A;1E04A;A689;A689; # (𞁊; 𞁊; 𞁊; ꚉ; ꚉ; ) MODIFIER LETTER CYRILLIC SMALL DZZE
1E04B;1E04B;1E04B;04D9;04D9; # (𞁋; 𞁋; 𞁋; ә; ә; ) MODIFIER LETTER CYRILLIC SMALL SCHWA
1E04C;1E04C;1E04C;0456;0456; # (𞁌; 𞁌; 𞁌; і; і; ) MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I
1E04D;1E04D;1E04D;0458;0458; # (𞁍; 𞁍; 𞁍; ј; ј; ) MODIFIER LETTER CYRILLIC SMALL JE
1E04E;1E04E;1E04E;04E9;04E9; # (𞁎; 𞁎; 𞁎; ө; ө; ) MODIFIER LETTER CYRILLIC SMALL BARRED O
1E04F;1E04F;1E04F;04AF;04AF; # (𞁏; 𞁏; 𞁏; ү; ү; ) MODIFIER LETTER CYRILLIC SMALL STRAIGHT U
1E050;1E050;1E050;04CF;04CF; # (𞁐; 𞁐; 𞁐; ӏ; ӏ; ) MODIFIER LETTER CYRILLIC SMALL PALOCHKA
1E051;1E051;1E051;0430;0430; # (𞁑; 𞁑; 𞁑; а; а; ) CYRILLIC SUBSCRIPT SMALL LETTER A
1E052;1E052;1E052;0431;0431; # (𞁒; 𞁒; 𞁒; б; б; ) CYRILLIC SUBSCRIPT SMALL LETTER BE
1E053;1E053;1E053;0432;0432; # (𞁓; 𞁓; 𞁓; в; в; ) CYRILLIC SUBSCRIPT SMALL LETTER VE
1E054;1E054;1E054;0433;0433; # (𞁔; 𞁔; 𞁔; г; г; ) CYRILLIC SUBSCRIPT SMALL LETTER GHE
1E055;1E055;1E055;0434;0434; # (𞁕; 𞁕; 𞁕; д; д; ) CYRILLIC SUBSCRIPT SMALL LETTER DE
1E056;1E056;1E056;0435;0435; # (𞁖; 𞁖; 𞁖; е; е; ) CYRILLIC SUBSCRIPT SMALL LETTER IE
1E057;1E057;1E057;0436;0436; # (𞁗; 𞁗; 𞁗; ж; ж; ) CYRILLIC SUBSCRIPT SMALL LETTER ZHE
1E058;1E058;1E058;0437;0437; # (𞁘; 𞁘; 𞁘; з; з; ) CYRILLIC SUBSCRIPT SMALL LETTER ZE
1E059;1E059;1E059;0438;0438; # (𞁙; 𞁙; 𞁙; и; и; ) CYRILLIC SUBSCRIPT SMALL LETTER I
1E05A;1E05A;1E05A;043A;043A; # (𞁚; 𞁚; 𞁚; к; к; ) CYRILLIC SUBSCRIPT SMALL LETTER KA
1E05B;1E05B;1E05B;043B;043B; # (𞁛; 𞁛; 𞁛; л; л; ) CYRILLIC SUBSCRIPT SMALL LETTER EL
1E05C;1E05C;1E05C;043E;043E; # (𞁜; 𞁜; 𞁜; о; о; ) CYRILLIC SUBSCRIPT SMALL LETTER O
1E05D;1E05D;1E05D;043F;043F; # (𞁝; 𞁝; 𞁝; п; п; ) CYRILLIC SUBSCRIPT SMALL LETTER PE
1E05E;1E05E;1E05E;0441;0441; # (𞁞; 𞁞; 𞁞; с; с; ) CYRILLIC SUBSCRIPT SMALL LETTER ES
1E05F;1E05F;1E05F;0443;0443; # (𞁟; 𞁟; 𞁟; у; у; ) CYRILLIC SUBSCRIPT SMALL LETTER U
1E060;1E060;1E060;0444;0444; # (𞁠; 𞁠; 𞁠; ф; ф; ) CYRILLIC SUBSCRIPT SMALL LETTER EF
1E061;1E061;1E061;0445;0445; # (𞁡; 𞁡; 𞁡; х; х; ) CYRILLIC SUBSCRIPT SMALL LETTER HA
1E062;1E062;1E062;0446;0446; # (𞁢; 𞁢; 𞁢; ц; ц; ) CYRILLIC SUBSCRIPT SMALL LETTER TSE
1E063;1E063;1E063;0447;0447; # (𞁣; 𞁣; 𞁣; ч; ч; ) CYRILLIC SUBSCRIPT SMALL LETTER CHE
1E064;1E064;1E064;0448;0448; # (𞁤; 𞁤; 𞁤; ш; ш; ) CYRILLIC SUBSCRIPT SMALL LETTER SHA
1E065;1E065;1E065;044A;044A; # (𞁥; 𞁥; 𞁥; ъ; ъ; ) CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN
1E066;1E066;1E066;044B;044B; # (𞁦; 𞁦; 𞁦; ы; ы; ) CYRILLIC SUBSCRIPT SMALL LETTER YERU
1E067;1E067;1E067;0491;0491; # (𞁧; 𞁧; 𞁧; ґ; ґ; ) CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN
1E068;1E068;1E068;0456;0456; # (𞁨; 𞁨; 𞁨; і; і; ) CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I
1E069;1E069;1E069;0455;0455; # (𞁩; 𞁩; 𞁩; ѕ; ѕ; ) CYRILLIC SUBSCRIPT SMALL LETTER DZE
1E06A;1E06A;1E06A;045F;045F; # (𞁪; 𞁪; 𞁪; џ; џ; ) CYRILLIC SUBSCRIPT SMALL LETTER DZHE
1E06B;1E06B;1E06B;04AB;04AB; # (𞁫; 𞁫; 𞁫; ҫ; ҫ; ) MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER
1E06C;1E06C;1E06C;A651;A651; # (𞁬; 𞁬; 𞁬; ꙑ; ꙑ; ) MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER
1E06D;1E06D;1E06D;04B1;04B1; # (𞁭; 𞁭; 𞁭; ұ; ұ; ) MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE
1EE00;1EE00;1EE00;0627;0627; # (𞸀; 𞸀; 𞸀; ا; ا; ) ARABIC MATHEMATICAL ALEF
1EE01;1EE01;1EE01;0628;0628; # (𞸁; 𞸁; 𞸁; ب; ب; ) ARABIC MATHEMATICAL BEH
1EE02;1EE02;1EE02;062C;062C; # (𞸂; 𞸂; 𞸂; ج; ج; ) ARABIC MATHEMATICAL JEEM
@ -18558,12 +18496,6 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
0061 10EAB 0315 0300 05AE 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062; # (a◌𐺫◌̕◌̀◌֮b; a◌֮◌𐺫◌̀◌̕b; a◌֮◌𐺫◌̀◌̕b; a◌֮◌𐺫◌̀◌̕b; a◌֮◌𐺫◌̀◌̕b; ) LATIN SMALL LETTER A, YEZIDI COMBINING HAMZA MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 0315 0300 05AE 10EAC 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 0315 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 0315 0062; # (a◌̕◌̀◌֮◌𐺬b; à◌֮◌𐺬◌̕b; a◌֮◌̀◌𐺬◌̕b; à◌֮◌𐺬◌̕b; a◌֮◌̀◌𐺬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, YEZIDI COMBINING MADDA MARK, LATIN SMALL LETTER B
0061 10EAC 0315 0300 05AE 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062; # (a◌𐺬◌̕◌̀◌֮b; a◌֮◌𐺬◌̀◌̕b; a◌֮◌𐺬◌̀◌̕b; a◌֮◌𐺬◌̀◌̕b; a◌֮◌𐺬◌̀◌̕b; ) LATIN SMALL LETTER A, YEZIDI COMBINING MADDA MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 059A 0316 1DFA 10EFD 0062;0061 1DFA 0316 10EFD 059A 0062;0061 1DFA 0316 10EFD 059A 0062;0061 1DFA 0316 10EFD 059A 0062;0061 1DFA 0316 10EFD 059A 0062; # (a◌֚◌̖◌᷺◌𐻽b; a◌᷺◌̖◌𐻽◌֚b; a◌᷺◌̖◌𐻽◌֚b; a◌᷺◌̖◌𐻽◌֚b; a◌᷺◌̖◌𐻽◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, ARABIC SMALL LOW WORD SAKTA, LATIN SMALL LETTER B
0061 10EFD 059A 0316 1DFA 0062;0061 1DFA 10EFD 0316 059A 0062;0061 1DFA 10EFD 0316 059A 0062;0061 1DFA 10EFD 0316 059A 0062;0061 1DFA 10EFD 0316 059A 0062; # (a◌𐻽◌֚◌̖◌᷺b; a◌᷺◌𐻽◌̖◌֚b; a◌᷺◌𐻽◌̖◌֚b; a◌᷺◌𐻽◌̖◌֚b; a◌᷺◌𐻽◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW WORD SAKTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
0061 059A 0316 1DFA 10EFE 0062;0061 1DFA 0316 10EFE 059A 0062;0061 1DFA 0316 10EFE 059A 0062;0061 1DFA 0316 10EFE 059A 0062;0061 1DFA 0316 10EFE 059A 0062; # (a◌֚◌̖◌᷺◌𐻾b; a◌᷺◌̖◌𐻾◌֚b; a◌᷺◌̖◌𐻾◌֚b; a◌᷺◌̖◌𐻾◌֚b; a◌᷺◌̖◌𐻾◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, ARABIC SMALL LOW WORD QASR, LATIN SMALL LETTER B
0061 10EFE 059A 0316 1DFA 0062;0061 1DFA 10EFE 0316 059A 0062;0061 1DFA 10EFE 0316 059A 0062;0061 1DFA 10EFE 0316 059A 0062;0061 1DFA 10EFE 0316 059A 0062; # (a◌𐻾◌֚◌̖◌᷺b; a◌᷺◌𐻾◌̖◌֚b; a◌᷺◌𐻾◌̖◌֚b; a◌᷺◌𐻾◌̖◌֚b; a◌᷺◌𐻾◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW WORD QASR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
0061 059A 0316 1DFA 10EFF 0062;0061 1DFA 0316 10EFF 059A 0062;0061 1DFA 0316 10EFF 059A 0062;0061 1DFA 0316 10EFF 059A 0062;0061 1DFA 0316 10EFF 059A 0062; # (a◌֚◌̖◌᷺◌𐻿b; a◌᷺◌̖◌𐻿◌֚b; a◌᷺◌̖◌𐻿◌֚b; a◌᷺◌̖◌𐻿◌֚b; a◌᷺◌̖◌𐻿◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, ARABIC SMALL LOW WORD MADDA, LATIN SMALL LETTER B
0061 10EFF 059A 0316 1DFA 0062;0061 1DFA 10EFF 0316 059A 0062;0061 1DFA 10EFF 0316 059A 0062;0061 1DFA 10EFF 0316 059A 0062;0061 1DFA 10EFF 0316 059A 0062; # (a◌𐻿◌֚◌̖◌᷺b; a◌᷺◌𐻿◌̖◌֚b; a◌᷺◌𐻿◌̖◌֚b; a◌᷺◌𐻿◌̖◌֚b; a◌᷺◌𐻿◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW WORD MADDA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
0061 059A 0316 1DFA 10F46 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062; # (a◌֚◌̖◌᷺◌𐽆b; a◌᷺◌̖◌𐽆◌֚b; a◌᷺◌̖◌𐽆◌֚b; a◌᷺◌̖◌𐽆◌֚b; a◌᷺◌̖◌𐽆◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, SOGDIAN COMBINING DOT BELOW, LATIN SMALL LETTER B
0061 10F46 059A 0316 1DFA 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 0316 059A 0062; # (a◌𐽆◌֚◌̖◌᷺b; a◌᷺◌𐽆◌̖◌֚b; a◌᷺◌𐽆◌̖◌֚b; a◌᷺◌𐽆◌̖◌֚b; a◌᷺◌𐽆◌̖◌֚b; ) LATIN SMALL LETTER A, SOGDIAN COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
0061 059A 0316 1DFA 10F47 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062; # (a◌֚◌̖◌᷺◌𐽇b; a◌᷺◌̖◌𐽇◌֚b; a◌᷺◌̖◌𐽇◌֚b; a◌᷺◌̖◌𐽇◌֚b; a◌᷺◌̖◌𐽇◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, SOGDIAN COMBINING TWO DOTS BELOW, LATIN SMALL LETTER B
@ -18708,10 +18640,6 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
0061 11D45 05B0 094D 3099 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062; # (a◌𑵅◌ְ◌्◌゙b; a◌゙◌𑵅◌्◌ְb; a◌゙◌𑵅◌्◌ְb; a◌゙◌𑵅◌्◌ְb; a◌゙◌𑵅◌्◌ְb; ) LATIN SMALL LETTER A, MASARAM GONDI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
0061 05B0 094D 3099 11D97 0062;0061 3099 094D 11D97 05B0 0062;0061 3099 094D 11D97 05B0 0062;0061 3099 094D 11D97 05B0 0062;0061 3099 094D 11D97 05B0 0062; # (a◌ְ◌्◌゙◌𑶗b; a◌゙◌्◌𑶗◌ְb; a◌゙◌्◌𑶗◌ְb; a◌゙◌्◌𑶗◌ְb; a◌゙◌्◌𑶗◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, GUNJALA GONDI VIRAMA, LATIN SMALL LETTER B
0061 11D97 05B0 094D 3099 0062;0061 3099 11D97 094D 05B0 0062;0061 3099 11D97 094D 05B0 0062;0061 3099 11D97 094D 05B0 0062;0061 3099 11D97 094D 05B0 0062; # (a◌𑶗◌ְ◌्◌゙b; a◌゙◌𑶗◌्◌ְb; a◌゙◌𑶗◌्◌ְb; a◌゙◌𑶗◌्◌ְb; a◌゙◌𑶗◌्◌ְb; ) LATIN SMALL LETTER A, GUNJALA GONDI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
0061 05B0 094D 3099 11F41 0062;0061 3099 094D 11F41 05B0 0062;0061 3099 094D 11F41 05B0 0062;0061 3099 094D 11F41 05B0 0062;0061 3099 094D 11F41 05B0 0062; # (a◌ְ◌्◌゙𑽁b; a◌゙◌्𑽁◌ְb; a◌゙◌्𑽁◌ְb; a◌゙◌्𑽁◌ְb; a◌゙◌्𑽁◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KAWI SIGN KILLER, LATIN SMALL LETTER B
0061 11F41 05B0 094D 3099 0062;0061 3099 11F41 094D 05B0 0062;0061 3099 11F41 094D 05B0 0062;0061 3099 11F41 094D 05B0 0062;0061 3099 11F41 094D 05B0 0062; # (a𑽁◌ְ◌्◌゙b; a◌゙𑽁◌्◌ְb; a◌゙𑽁◌्◌ְb; a◌゙𑽁◌्◌ְb; a◌゙𑽁◌्◌ְb; ) LATIN SMALL LETTER A, KAWI SIGN KILLER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
0061 05B0 094D 3099 11F42 0062;0061 3099 094D 11F42 05B0 0062;0061 3099 094D 11F42 05B0 0062;0061 3099 094D 11F42 05B0 0062;0061 3099 094D 11F42 05B0 0062; # (a◌ְ◌्◌゙◌𑽂b; a◌゙◌्◌𑽂◌ְb; a◌゙◌्◌𑽂◌ְb; a◌゙◌्◌𑽂◌ְb; a◌゙◌्◌𑽂◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KAWI CONJOINER, LATIN SMALL LETTER B
0061 11F42 05B0 094D 3099 0062;0061 3099 11F42 094D 05B0 0062;0061 3099 11F42 094D 05B0 0062;0061 3099 11F42 094D 05B0 0062;0061 3099 11F42 094D 05B0 0062; # (a◌𑽂◌ְ◌्◌゙b; a◌゙◌𑽂◌्◌ְb; a◌゙◌𑽂◌्◌ְb; a◌゙◌𑽂◌्◌ְb; a◌゙◌𑽂◌्◌ְb; ) LATIN SMALL LETTER A, KAWI CONJOINER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B
0061 16FF0 0334 16AF0 0062;0061 0334 16AF0 16FF0 0062;0061 0334 16AF0 16FF0 0062;0061 0334 16AF0 16FF0 0062;0061 0334 16AF0 16FF0 0062; # (a𖿰◌̴◌𖫰b; a◌̴◌𖫰𖿰b; a◌̴◌𖫰𖿰b; a◌̴◌𖫰𖿰b; a◌̴◌𖫰𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING HIGH TONE, LATIN SMALL LETTER B
0061 16AF0 16FF0 0334 0062;0061 16AF0 0334 16FF0 0062;0061 16AF0 0334 16FF0 0062;0061 16AF0 0334 16FF0 0062;0061 16AF0 0334 16FF0 0062; # (a◌𖫰𖿰◌̴b; a◌𖫰◌̴𖿰b; a◌𖫰◌̴𖿰b; a◌𖫰◌̴𖿰b; a◌𖫰◌̴𖿰b; ) LATIN SMALL LETTER A, BASSA VAH COMBINING HIGH TONE, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B
0061 16FF0 0334 16AF1 0062;0061 0334 16AF1 16FF0 0062;0061 0334 16AF1 16FF0 0062;0061 0334 16AF1 16FF0 0062;0061 0334 16AF1 16FF0 0062; # (a𖿰◌̴◌𖫱b; a◌̴◌𖫱𖿰b; a◌̴◌𖫱𖿰b; a◌̴◌𖫱𖿰b; a◌̴◌𖫱𖿰b; ) LATIN SMALL LETTER A, VIETNAMESE ALTERNATE READING MARK CA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING LOW TONE, LATIN SMALL LETTER B
@ -18884,8 +18812,6 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
0061 1E029 0315 0300 05AE 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062; # (a◌𞀩◌̕◌̀◌֮b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER IOTATED BIG YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 0315 0300 05AE 1E02A 0062;00E0 05AE 1E02A 0315 0062;0061 05AE 0300 1E02A 0315 0062;00E0 05AE 1E02A 0315 0062;0061 05AE 0300 1E02A 0315 0062; # (a◌̕◌̀◌֮◌𞀪b; à◌֮◌𞀪◌̕b; a◌֮◌̀◌𞀪◌̕b; à◌֮◌𞀪◌̕b; a◌֮◌̀◌𞀪◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER FITA, LATIN SMALL LETTER B
0061 1E02A 0315 0300 05AE 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062; # (a◌𞀪◌̕◌̀◌֮b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER FITA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 0315 0300 05AE 1E08F 0062;00E0 05AE 1E08F 0315 0062;0061 05AE 0300 1E08F 0315 0062;00E0 05AE 1E08F 0315 0062;0061 05AE 0300 1E08F 0315 0062; # (a◌̕◌̀◌֮◌𞂏b; à◌֮◌𞂏◌̕b; a◌֮◌̀◌𞂏◌̕b; à◌֮◌𞂏◌̕b; a◌֮◌̀◌𞂏◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I, LATIN SMALL LETTER B
0061 1E08F 0315 0300 05AE 0062;0061 05AE 1E08F 0300 0315 0062;0061 05AE 1E08F 0300 0315 0062;0061 05AE 1E08F 0300 0315 0062;0061 05AE 1E08F 0300 0315 0062; # (a◌𞂏◌̕◌̀◌֮b; a◌֮◌𞂏◌̀◌̕b; a◌֮◌𞂏◌̀◌̕b; a◌֮◌𞂏◌̀◌̕b; a◌֮◌𞂏◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 0315 0300 05AE 1E130 0062;00E0 05AE 1E130 0315 0062;0061 05AE 0300 1E130 0315 0062;00E0 05AE 1E130 0315 0062;0061 05AE 0300 1E130 0315 0062; # (a◌̕◌̀◌֮◌𞄰b; à◌֮◌𞄰◌̕b; a◌֮◌̀◌𞄰◌̕b; à◌֮◌𞄰◌̕b; a◌֮◌̀◌𞄰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-B, LATIN SMALL LETTER B
0061 1E130 0315 0300 05AE 0062;0061 05AE 1E130 0300 0315 0062;0061 05AE 1E130 0300 0315 0062;0061 05AE 1E130 0300 0315 0062;0061 05AE 1E130 0300 0315 0062; # (a◌𞄰◌̕◌̀◌֮b; a◌֮◌𞄰◌̀◌̕b; a◌֮◌𞄰◌̀◌̕b; a◌֮◌𞄰◌̀◌̕b; a◌֮◌𞄰◌̀◌̕b; ) LATIN SMALL LETTER A, NYIAKENG PUACHUE HMONG TONE-B, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 0315 0300 05AE 1E131 0062;00E0 05AE 1E131 0315 0062;0061 05AE 0300 1E131 0315 0062;00E0 05AE 1E131 0315 0062;0061 05AE 0300 1E131 0315 0062; # (a◌̕◌̀◌֮◌𞄱b; à◌֮◌𞄱◌̕b; a◌֮◌̀◌𞄱◌̕b; à◌֮◌𞄱◌̕b; a◌֮◌̀◌𞄱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NYIAKENG PUACHUE HMONG TONE-M, LATIN SMALL LETTER B
@ -18910,14 +18836,6 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE
0061 1E2EE 0315 0300 05AE 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062; # (a◌𞋮◌̕◌̀◌֮b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; a◌֮◌𞋮◌̀◌̕b; ) LATIN SMALL LETTER A, WANCHO TONE KOI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 0315 0300 05AE 1E2EF 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 0315 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 0315 0062; # (a◌̕◌̀◌֮◌𞋯b; à◌֮◌𞋯◌̕b; a◌֮◌̀◌𞋯◌̕b; à◌֮◌𞋯◌̕b; a◌֮◌̀◌𞋯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, WANCHO TONE KOINI, LATIN SMALL LETTER B
0061 1E2EF 0315 0300 05AE 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062; # (a◌𞋯◌̕◌̀◌֮b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; a◌֮◌𞋯◌̀◌̕b; ) LATIN SMALL LETTER A, WANCHO TONE KOINI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 035C 0315 0300 1E4EC 0062;00E0 0315 1E4EC 035C 0062;0061 0300 0315 1E4EC 035C 0062;00E0 0315 1E4EC 035C 0062;0061 0300 0315 1E4EC 035C 0062; # (a◌͜◌̕◌̀◌𞓬b; à◌̕◌𞓬◌͜b; a◌̀◌̕◌𞓬◌͜b; à◌̕◌𞓬◌͜b; a◌̀◌̕◌𞓬◌͜b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, NAG MUNDARI SIGN MUHOR, LATIN SMALL LETTER B
0061 1E4EC 035C 0315 0300 0062;00E0 1E4EC 0315 035C 0062;0061 0300 1E4EC 0315 035C 0062;00E0 1E4EC 0315 035C 0062;0061 0300 1E4EC 0315 035C 0062; # (a◌𞓬◌͜◌̕◌̀b; à◌𞓬◌̕◌͜b; a◌̀◌𞓬◌̕◌͜b; à◌𞓬◌̕◌͜b; a◌̀◌𞓬◌̕◌͜b; ) LATIN SMALL LETTER A, NAG MUNDARI SIGN MUHOR, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
0061 035C 0315 0300 1E4ED 0062;00E0 0315 1E4ED 035C 0062;0061 0300 0315 1E4ED 035C 0062;00E0 0315 1E4ED 035C 0062;0061 0300 0315 1E4ED 035C 0062; # (a◌͜◌̕◌̀◌𞓭b; à◌̕◌𞓭◌͜b; a◌̀◌̕◌𞓭◌͜b; à◌̕◌𞓭◌͜b; a◌̀◌̕◌𞓭◌͜b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, NAG MUNDARI SIGN TOYOR, LATIN SMALL LETTER B
0061 1E4ED 035C 0315 0300 0062;00E0 1E4ED 0315 035C 0062;0061 0300 1E4ED 0315 035C 0062;00E0 1E4ED 0315 035C 0062;0061 0300 1E4ED 0315 035C 0062; # (a◌𞓭◌͜◌̕◌̀b; à◌𞓭◌̕◌͜b; a◌̀◌𞓭◌̕◌͜b; à◌𞓭◌̕◌͜b; a◌̀◌𞓭◌̕◌͜b; ) LATIN SMALL LETTER A, NAG MUNDARI SIGN TOYOR, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B
0061 059A 0316 1DFA 1E4EE 0062;0061 1DFA 0316 1E4EE 059A 0062;0061 1DFA 0316 1E4EE 059A 0062;0061 1DFA 0316 1E4EE 059A 0062;0061 1DFA 0316 1E4EE 059A 0062; # (a◌֚◌̖◌᷺◌𞓮b; a◌᷺◌̖◌𞓮◌֚b; a◌᷺◌̖◌𞓮◌֚b; a◌᷺◌̖◌𞓮◌֚b; a◌᷺◌̖◌𞓮◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, NAG MUNDARI SIGN IKIR, LATIN SMALL LETTER B
0061 1E4EE 059A 0316 1DFA 0062;0061 1DFA 1E4EE 0316 059A 0062;0061 1DFA 1E4EE 0316 059A 0062;0061 1DFA 1E4EE 0316 059A 0062;0061 1DFA 1E4EE 0316 059A 0062; # (a◌𞓮◌֚◌̖◌᷺b; a◌᷺◌𞓮◌̖◌֚b; a◌᷺◌𞓮◌̖◌֚b; a◌᷺◌𞓮◌̖◌֚b; a◌᷺◌𞓮◌̖◌֚b; ) LATIN SMALL LETTER A, NAG MUNDARI SIGN IKIR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
0061 0315 0300 05AE 1E4EF 0062;00E0 05AE 1E4EF 0315 0062;0061 05AE 0300 1E4EF 0315 0062;00E0 05AE 1E4EF 0315 0062;0061 05AE 0300 1E4EF 0315 0062; # (a◌̕◌̀◌֮◌𞓯b; à◌֮◌𞓯◌̕b; a◌֮◌̀◌𞓯◌̕b; à◌֮◌𞓯◌̕b; a◌֮◌̀◌𞓯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NAG MUNDARI SIGN SUTUH, LATIN SMALL LETTER B
0061 1E4EF 0315 0300 05AE 0062;0061 05AE 1E4EF 0300 0315 0062;0061 05AE 1E4EF 0300 0315 0062;0061 05AE 1E4EF 0300 0315 0062;0061 05AE 1E4EF 0300 0315 0062; # (a◌𞓯◌̕◌̀◌֮b; a◌֮◌𞓯◌̀◌̕b; a◌֮◌𞓯◌̀◌̕b; a◌֮◌𞓯◌̀◌̕b; a◌֮◌𞓯◌̀◌̕b; ) LATIN SMALL LETTER A, NAG MUNDARI SIGN SUTUH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B
0061 059A 0316 1DFA 1E8D0 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062; # (a◌֚◌̖◌᷺◌𞣐b; a◌᷺◌̖◌𞣐◌֚b; a◌᷺◌̖◌𞣐◌֚b; a◌᷺◌̖◌𞣐◌֚b; a◌᷺◌̖◌𞣐◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER TEENS, LATIN SMALL LETTER B
0061 1E8D0 059A 0316 1DFA 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062; # (a◌𞣐◌֚◌̖◌᷺b; a◌᷺◌𞣐◌̖◌֚b; a◌᷺◌𞣐◌̖◌֚b; a◌᷺◌𞣐◌̖◌֚b; a◌᷺◌𞣐◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER TEENS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B
0061 059A 0316 1DFA 1E8D1 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062; # (a◌֚◌̖◌᷺◌𞣑b; a◌᷺◌̖◌𞣑◌֚b; a◌᷺◌̖◌𞣑◌֚b; a◌᷺◌̖◌𞣑◌֚b; a◌᷺◌̖◌𞣑◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, MENDE KIKAKUI COMBINING NUMBER TENS, LATIN SMALL LETTER B

File diff suppressed because it is too large Load diff

View file

@ -6,31 +6,31 @@ copyright.html.
The names, URLs, and dates for these files are as follows.
BidiBrackets.txt
https://www.unicode.org/Public/UNIDATA/BidiBrackets.txt
http://www.unicode.org/Public/UNIDATA/BidiBrackets.txt
2021-06-30
BidiMirroring.txt
https://www.unicode.org/Public/UNIDATA/BidiMirroring.txt
http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt
2021-08-08
Blocks.txt
https://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
2021-01-22
IVD_Sequences.txt
https://www.unicode.org/ivd/
http://www.unicode.org/ivd/
2020-11-06
NormalizationTest.txt
https://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
2021-05-28
SpecialCasing.txt
https://unicode.org/Public/UNIDATA/SpecialCasing.txt
http://unicode.org/Public/UNIDATA/SpecialCasing.txt
2021-03-08
UnicodeData.txt
https://www.unicode.org/Public/UNIDATA/UnicodeData.txt
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
2021-07-06
emoji-data.txt
@ -44,23 +44,3 @@ https://www.unicode.org/Public/emoji/14.0/emoji-zwj-sequences.txt
emoji-sequences.txt
https://www.unicode.org/Public/emoji/14.0/emoji-sequences.txt
2020-08-26
emoji-test.txt
https://unicode.org/Public/emoji/14.0/emoji-test.txt
2021-10-28
ScriptExtensions.txt
https://www.unicode.org/Public/UCD/latest/ucd/ScriptExtensions.txt
2022-01-17
Scripts.txt
https://www.unicode.org/Public/UCD/latest/ucd/Scripts.txt
2022-01-17
PropertyValueAliases.txt
https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt
2022-01-17
IdnaMappingTable.txt
https://www.unicode.org/Public/idna/latest/IdnaMappingTable.txt
2022-01-18

View file

@ -1,628 +0,0 @@
# ScriptExtensions-15.0.0.txt
# Date: 2022-02-02, 00:57:11 GMT
# © 2022 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see https://www.unicode.org/reports/tr44/
#
# The Script_Extensions property indicates which characters are commonly used
# with more than one script, but with a limited number of scripts.
# For each code point, there is one or more property values. Each such value is a Script property value.
# For more information, see:
# UAX #24, Unicode Script Property: https://www.unicode.org/reports/tr24/
# Especially the sections:
# https://www.unicode.org/reports/tr24/#Assignment_Script_Values
# https://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values
#
# Each Script_Extensions value in this file consists of a set
# of one or more abbreviated Script property values. The ordering of the
# values in that set is not material, but for stability in presentation
# it is given here as alphabetical.
#
# The Script_Extensions values are presented in sorted order in the file.
# They are sorted first by the number of Script property values in their sets,
# and then alphabetically by first differing Script property value.
#
# Following each distinct Script_Extensions value is the list of code
# points associated with that value, listed in code point order.
#
# All code points not explicitly listed for Script_Extensions
# have as their value the corresponding Script property value
#
# @missing: 0000..10FFFF; <script>
# ================================================
# Property: Script_Extensions
# ================================================
# Script_Extensions=Beng
1CF7 ; Beng # Mc VEDIC SIGN ATIKRAMA
# Total code points: 1
# ================================================
# Script_Extensions=Deva
1CD1 ; Deva # Mn VEDIC TONE SHARA
1CD4 ; Deva # Mn VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
1CDB ; Deva # Mn VEDIC TONE TRIPLE SVARITA
1CDE..1CDF ; Deva # Mn [2] VEDIC TONE TWO DOTS BELOW..VEDIC TONE THREE DOTS BELOW
1CE2..1CE8 ; Deva # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
1CEB..1CEC ; Deva # Lo [2] VEDIC SIGN ANUSVARA VAMAGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
1CEE..1CF1 ; Deva # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
# Total code points: 18
# ================================================
# Script_Extensions=Dupl
1BCA0..1BCA3 ; Dupl # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
# Total code points: 4
# ================================================
# Script_Extensions=Grek
0342 ; Grek # Mn COMBINING GREEK PERISPOMENI
0345 ; Grek # Mn COMBINING GREEK YPOGEGRAMMENI
1DC0..1DC1 ; Grek # Mn [2] COMBINING DOTTED GRAVE ACCENT..COMBINING DOTTED ACUTE ACCENT
# Total code points: 4
# ================================================
# Script_Extensions=Hani
3006 ; Hani # Lo IDEOGRAPHIC CLOSING MARK
303E..303F ; Hani # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
3190..3191 ; Hani # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; Hani # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; Hani # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
31C0..31E3 ; Hani # So [36] CJK STROKE T..CJK STROKE Q
3220..3229 ; Hani # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
322A..3247 ; Hani # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
3280..3289 ; Hani # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
328A..32B0 ; Hani # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
32C0..32CB ; Hani # So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
32FF ; Hani # So SQUARE ERA NAME REIWA
3358..3370 ; Hani # So [25] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
337B..337F ; Hani # So [5] SQUARE ERA NAME HEISEI..SQUARE CORPORATION
33E0..33FE ; Hani # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
1D360..1D371 ; Hani # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
1F250..1F251 ; Hani # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
# Total code points: 238
# ================================================
# Script_Extensions=Latn
0363..036F ; Latn # Mn [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X
# Total code points: 13
# ================================================
# Script_Extensions=Nand
1CFA ; Nand # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
# Total code points: 1
# ================================================
# Script_Extensions=Syrc
1DFA ; Syrc # Mn COMBINING DOT BELOW LEFT
# Total code points: 1
# ================================================
# Script_Extensions=Arab Copt
102E0 ; Arab Copt # Mn COPTIC EPACT THOUSANDS MARK
102E1..102FB ; Arab Copt # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
# Total code points: 28
# ================================================
# Script_Extensions=Arab Rohg
06D4 ; Arab Rohg # Po ARABIC FULL STOP
# Total code points: 1
# ================================================
# Script_Extensions=Arab Nkoo
FD3E ; Arab Nkoo # Pe ORNATE LEFT PARENTHESIS
FD3F ; Arab Nkoo # Ps ORNATE RIGHT PARENTHESIS
# Total code points: 2
# ================================================
# Script_Extensions=Arab Syrc
064B..0655 ; Arab Syrc # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
0670 ; Arab Syrc # Mn ARABIC LETTER SUPERSCRIPT ALEF
# Total code points: 12
# ================================================
# Script_Extensions=Arab Thaa
FDF2 ; Arab Thaa # Lo ARABIC LIGATURE ALLAH ISOLATED FORM
FDFD ; Arab Thaa # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
# Total code points: 2
# ================================================
# Script_Extensions=Beng Deva
1CD5..1CD6 ; Beng Deva # Mn [2] VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA..VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
1CD8 ; Beng Deva # Mn VEDIC TONE CANDRA BELOW
1CE1 ; Beng Deva # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
1CEA ; Beng Deva # Lo VEDIC SIGN ANUSVARA BAHIRGOMUKHA
1CED ; Beng Deva # Mn VEDIC SIGN TIRYAK
1CF5..1CF6 ; Beng Deva # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
A8F1 ; Beng Deva # Mn COMBINING DEVANAGARI SIGN AVAGRAHA
# Total code points: 9
# ================================================
# Script_Extensions=Bopo Hani
302A..302D ; Bopo Hani # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
# Total code points: 4
# ================================================
# Script_Extensions=Bugi Java
A9CF ; Bugi Java # Lm JAVANESE PANGRANGKEP
# Total code points: 1
# ================================================
# Script_Extensions=Cprt Linb
10102 ; Cprt Linb # Po AEGEAN CHECK MARK
10137..1013F ; Cprt Linb # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
# Total code points: 10
# ================================================
# Script_Extensions=Cyrl Glag
0484 ; Cyrl Glag # Mn COMBINING CYRILLIC PALATALIZATION
0487 ; Cyrl Glag # Mn COMBINING CYRILLIC POKRYTIE
2E43 ; Cyrl Glag # Po DASH WITH LEFT UPTURN
A66F ; Cyrl Glag # Mn COMBINING CYRILLIC VZMET
# Total code points: 4
# ================================================
# Script_Extensions=Cyrl Latn
0485..0486 ; Cyrl Latn # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
# Total code points: 2
# ================================================
# Script_Extensions=Cyrl Perm
0483 ; Cyrl Perm # Mn COMBINING CYRILLIC TITLO
# Total code points: 1
# ================================================
# Script_Extensions=Cyrl Syrc
1DF8 ; Cyrl Syrc # Mn COMBINING DOT ABOVE LEFT
# Total code points: 1
# ================================================
# Script_Extensions=Deva Gran
1CD3 ; Deva Gran # Po VEDIC SIGN NIHSHVASA
1CF3 ; Deva Gran # Lo VEDIC SIGN ROTATED ARDHAVISARGA
1CF8..1CF9 ; Deva Gran # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
# Total code points: 4
# ================================================
# Script_Extensions=Deva Nand
1CE9 ; Deva Nand # Lo VEDIC SIGN ANUSVARA ANTARGOMUKHA
# Total code points: 1
# ================================================
# Script_Extensions=Deva Shrd
1CD7 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
1CD9 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
1CDC..1CDD ; Deva Shrd # Mn [2] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE DOT BELOW
1CE0 ; Deva Shrd # Mn VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
# Total code points: 5
# ================================================
# Script_Extensions=Deva Taml
A8F3 ; Deva Taml # Lo DEVANAGARI SIGN CANDRABINDU VIRAMA
# Total code points: 1
# ================================================
# Script_Extensions=Geor Latn
10FB ; Geor Latn # Po GEORGIAN PARAGRAPH SEPARATOR
# Total code points: 1
# ================================================
# Script_Extensions=Gran Taml
0BE6..0BEF ; Gran Taml # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
0BF0..0BF2 ; Gran Taml # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
0BF3 ; Gran Taml # So TAMIL DAY SIGN
11301 ; Gran Taml # Mn GRANTHA SIGN CANDRABINDU
11303 ; Gran Taml # Mc GRANTHA SIGN VISARGA
1133B..1133C ; Gran Taml # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
11FD0..11FD1 ; Gran Taml # No [2] TAMIL FRACTION ONE QUARTER..TAMIL FRACTION ONE HALF-1
11FD3 ; Gran Taml # No TAMIL FRACTION THREE QUARTERS
# Total code points: 21
# ================================================
# Script_Extensions=Gujr Khoj
0AE6..0AEF ; Gujr Khoj # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Guru Mult
0A66..0A6F ; Guru Mult # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Hani Latn
A700..A707 ; Hani Latn # Sk [8] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER CHINESE TONE YANG RU
# Total code points: 8
# ================================================
# Script_Extensions=Hira Kana
3031..3035 ; Hira Kana # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
3099..309A ; Hira Kana # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
309B..309C ; Hira Kana # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
30A0 ; Hira Kana # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
30FC ; Hira Kana # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
FF70 ; Hira Kana # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
FF9E..FF9F ; Hira Kana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
# Total code points: 14
# ================================================
# Script_Extensions=Knda Nand
0CE6..0CEF ; Knda Nand # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Latn Mong
202F ; Latn Mong # Zs NARROW NO-BREAK SPACE
# Total code points: 1
# ================================================
# Script_Extensions=Mani Ougr
10AF2 ; Mani Ougr # Po MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT
# Total code points: 1
# ================================================
# Script_Extensions=Mong Phag
1802..1803 ; Mong Phag # Po [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP
1805 ; Mong Phag # Po MONGOLIAN FOUR DOTS
# Total code points: 3
# ================================================
# Script_Extensions=Arab Syrc Thaa
061C ; Arab Syrc Thaa # Cf ARABIC LETTER MARK
# Total code points: 1
# ================================================
# Script_Extensions=Arab Thaa Yezi
0660..0669 ; Arab Thaa Yezi # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Beng Cakm Sylo
09E6..09EF ; Beng Cakm Sylo # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Cakm Mymr Tale
1040..1049 ; Cakm Mymr Tale # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Cpmn Cprt Linb
10100..10101 ; Cpmn Cprt Linb # Po [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT
# Total code points: 2
# ================================================
# Script_Extensions=Cprt Lina Linb
10107..10133 ; Cprt Lina Linb # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
# Total code points: 45
# ================================================
# Script_Extensions=Deva Gran Knda
1CF4 ; Deva Gran Knda # Mn VEDIC TONE CANDRA ABOVE
# Total code points: 1
# ================================================
# Script_Extensions=Deva Gran Latn
20F0 ; Deva Gran Latn # Mn COMBINING ASTERISK ABOVE
# Total code points: 1
# ================================================
# Script_Extensions=Hani Hira Kana
303C ; Hani Hira Kana # Lo MASU MARK
303D ; Hani Hira Kana # Po PART ALTERNATION MARK
# Total code points: 2
# ================================================
# Script_Extensions=Kali Latn Mymr
A92E ; Kali Latn Mymr # Po KAYAH LI SIGN CWI
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Gran Knda
1CD0 ; Beng Deva Gran Knda # Mn VEDIC TONE KARSHANA
1CD2 ; Beng Deva Gran Knda # Mn VEDIC TONE PRENKHA
# Total code points: 2
# ================================================
# Script_Extensions=Buhd Hano Tagb Tglg
1735..1736 ; Buhd Hano Tagb Tglg # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
# Total code points: 2
# ================================================
# Script_Extensions=Deva Dogr Kthi Mahj
0966..096F ; Deva Dogr Kthi Mahj # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
# Total code points: 10
# ================================================
# Script_Extensions=Bopo Hang Hani Hira Kana
3003 ; Bopo Hang Hani Hira Kana # Po DITTO MARK
3013 ; Bopo Hang Hani Hira Kana # So GETA MARK
301C ; Bopo Hang Hani Hira Kana # Pd WAVE DASH
301D ; Bopo Hang Hani Hira Kana # Ps REVERSED DOUBLE PRIME QUOTATION MARK
301E..301F ; Bopo Hang Hani Hira Kana # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
3030 ; Bopo Hang Hani Hira Kana # Pd WAVY DASH
3037 ; Bopo Hang Hani Hira Kana # So IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
FE45..FE46 ; Bopo Hang Hani Hira Kana # Po [2] SESAME DOT..WHITE SESAME DOT
# Total code points: 10
# ================================================
# Script_Extensions=Arab Nkoo Rohg Syrc Thaa Yezi
060C ; Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC COMMA
061B ; Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC SEMICOLON
# Total code points: 2
# ================================================
# Script_Extensions=Bopo Hang Hani Hira Kana Yiii
3001..3002 ; Bopo Hang Hani Hira Kana Yiii # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
3008 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT ANGLE BRACKET
3009 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT ANGLE BRACKET
300A ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT DOUBLE ANGLE BRACKET
300B ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT DOUBLE ANGLE BRACKET
300C ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT CORNER BRACKET
300D ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT CORNER BRACKET
300E ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE CORNER BRACKET
300F ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE CORNER BRACKET
3010 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT BLACK LENTICULAR BRACKET
3011 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT BLACK LENTICULAR BRACKET
3014 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT TORTOISE SHELL BRACKET
3015 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT TORTOISE SHELL BRACKET
3016 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE LENTICULAR BRACKET
3017 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE LENTICULAR BRACKET
3018 ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE TORTOISE SHELL BRACKET
3019 ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE TORTOISE SHELL BRACKET
301A ; Bopo Hang Hani Hira Kana Yiii # Ps LEFT WHITE SQUARE BRACKET
301B ; Bopo Hang Hani Hira Kana Yiii # Pe RIGHT WHITE SQUARE BRACKET
30FB ; Bopo Hang Hani Hira Kana Yiii # Po KATAKANA MIDDLE DOT
FF61 ; Bopo Hang Hani Hira Kana Yiii # Po HALFWIDTH IDEOGRAPHIC FULL STOP
FF62 ; Bopo Hang Hani Hira Kana Yiii # Ps HALFWIDTH LEFT CORNER BRACKET
FF63 ; Bopo Hang Hani Hira Kana Yiii # Pe HALFWIDTH RIGHT CORNER BRACKET
FF64..FF65 ; Bopo Hang Hani Hira Kana Yiii # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
# Total code points: 26
# ================================================
# Script_Extensions=Deva Knda Mlym Orya Taml Telu
1CDA ; Deva Knda Mlym Orya Taml Telu # Mn VEDIC TONE DOUBLE SVARITA
# Total code points: 1
# ================================================
# Script_Extensions=Adlm Arab Nkoo Rohg Syrc Thaa Yezi
061F ; Adlm Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC QUESTION MARK
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Gran Knda Nand Orya Telu Tirh
1CF2 ; Beng Deva Gran Knda Nand Orya Telu Tirh # Lo VEDIC SIGN ARDHAVISARGA
# Total code points: 1
# ================================================
# Script_Extensions=Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc
0640 ; Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc # Lm ARABIC TATWEEL
# Total code points: 1
# ================================================
# Script_Extensions=Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh
A836..A837 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
A838 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # Sc NORTH INDIC RUPEE MARK
A839 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # So NORTH INDIC QUANTITY MARK
# Total code points: 4
# ================================================
# Script_Extensions=Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Taml Telu Tirh
0952 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Taml Telu Tirh # Mn DEVANAGARI STRESS SIGN ANUDATTA
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Shrd Taml Telu Tirh
0951 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Shrd Taml Telu Tirh # Mn DEVANAGARI STRESS SIGN UDATTA
# Total code points: 1
# ================================================
# Script_Extensions=Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Modi Nand Sind Takr Tirh
A833..A835 ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Modi Nand Sind Takr Tirh # No [3] NORTH INDIC FRACTION ONE SIXTEENTH..NORTH INDIC FRACTION THREE SIXTEENTHS
# Total code points: 3
# ================================================
# Script_Extensions=Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Mlym Modi Nand Sind Takr Tirh
A830..A832 ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Mlym Modi Nand Sind Takr Tirh # No [3] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE QUARTERS
# Total code points: 3
# ================================================
# Script_Extensions=Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh
0964 ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh # Po DEVANAGARI DANDA
# Total code points: 1
# ================================================
# Script_Extensions=Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Limb Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh
0965 ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Limb Mahj Mlym Nand Orya Sind Sinh Sylo Takr Taml Telu Tirh # Po DEVANAGARI DOUBLE DANDA
# Total code points: 1
# EOF

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,11 @@
# SpecialCasing-15.0.0.txt
# Date: 2022-02-02, 23:35:52 GMT
# © 2022 Unicode®, Inc.
# SpecialCasing-14.0.0.txt
# Date: 2021-03-08, 19:35:55 GMT
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see https://www.unicode.org/reports/tr44/
# For documentation, see http://www.unicode.org/reports/tr44/
#
# Special Casing
#

View file

@ -2975,7 +2975,6 @@
0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
0CF3;KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT;Mc;0;L;;;;;N;;;;;
0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
@ -3340,7 +3339,6 @@
0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
0ECE;LAO YAMAKKAN;Mn;0;NSM;;;;;N;;;;;
0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@ -19395,9 +19393,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;;
10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;;
10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;;
10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;;
10EFF;ARABIC SMALL LOW WORD MADDA;Mn;220;NSM;;;;;N;;;;;
10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;
10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
@ -20063,9 +20058,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;;
1123F;KHOJKI LETTER QA;Lo;0;L;;;;;N;;;;;
11240;KHOJKI LETTER SHORT I;Lo;0;L;;;;;N;;;;;
11241;KHOJKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;;
11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;;
11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;;
@ -21264,16 +21256,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;;
11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;;
11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;;
11B00;DEVANAGARI HEAD MARK;Po;0;L;;;;;N;;;;;
11B01;DEVANAGARI HEAD MARK WITH HEADSTROKE;Po;0;L;;;;;N;;;;;
11B02;DEVANAGARI SIGN BHALE;Po;0;L;;;;;N;;;;;
11B03;DEVANAGARI SIGN BHALE WITH HOOK;Po;0;L;;;;;N;;;;;
11B04;DEVANAGARI SIGN EXTENDED BHALE;Po;0;L;;;;;N;;;;;
11B05;DEVANAGARI SIGN EXTENDED BHALE WITH HOOK;Po;0;L;;;;;N;;;;;
11B06;DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE;Po;0;L;;;;;N;;;;;
11B07;DEVANAGARI SIGN WESTERN NINE-LIKE BHALE;Po;0;L;;;;;N;;;;;
11B08;DEVANAGARI SIGN REVERSED NINE-LIKE BHALE;Po;0;L;;;;;N;;;;;
11B09;DEVANAGARI SIGN MINDU;Po;0;L;;;;;N;;;;;
11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;;
11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;;
11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;;
@ -21602,92 +21584,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;;
11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;;
11F00;KAWI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
11F01;KAWI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
11F02;KAWI SIGN REPHA;Lo;0;L;;;;;N;;;;;
11F03;KAWI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
11F04;KAWI LETTER A;Lo;0;L;;;;;N;;;;;
11F05;KAWI LETTER AA;Lo;0;L;;;;;N;;;;;
11F06;KAWI LETTER I;Lo;0;L;;;;;N;;;;;
11F07;KAWI LETTER II;Lo;0;L;;;;;N;;;;;
11F08;KAWI LETTER U;Lo;0;L;;;;;N;;;;;
11F09;KAWI LETTER UU;Lo;0;L;;;;;N;;;;;
11F0A;KAWI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
11F0B;KAWI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
11F0C;KAWI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
11F0D;KAWI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
11F0E;KAWI LETTER E;Lo;0;L;;;;;N;;;;;
11F0F;KAWI LETTER AI;Lo;0;L;;;;;N;;;;;
11F10;KAWI LETTER O;Lo;0;L;;;;;N;;;;;
11F12;KAWI LETTER KA;Lo;0;L;;;;;N;;;;;
11F13;KAWI LETTER KHA;Lo;0;L;;;;;N;;;;;
11F14;KAWI LETTER GA;Lo;0;L;;;;;N;;;;;
11F15;KAWI LETTER GHA;Lo;0;L;;;;;N;;;;;
11F16;KAWI LETTER NGA;Lo;0;L;;;;;N;;;;;
11F17;KAWI LETTER CA;Lo;0;L;;;;;N;;;;;
11F18;KAWI LETTER CHA;Lo;0;L;;;;;N;;;;;
11F19;KAWI LETTER JA;Lo;0;L;;;;;N;;;;;
11F1A;KAWI LETTER JHA;Lo;0;L;;;;;N;;;;;
11F1B;KAWI LETTER NYA;Lo;0;L;;;;;N;;;;;
11F1C;KAWI LETTER TTA;Lo;0;L;;;;;N;;;;;
11F1D;KAWI LETTER TTHA;Lo;0;L;;;;;N;;;;;
11F1E;KAWI LETTER DDA;Lo;0;L;;;;;N;;;;;
11F1F;KAWI LETTER DDHA;Lo;0;L;;;;;N;;;;;
11F20;KAWI LETTER NNA;Lo;0;L;;;;;N;;;;;
11F21;KAWI LETTER TA;Lo;0;L;;;;;N;;;;;
11F22;KAWI LETTER THA;Lo;0;L;;;;;N;;;;;
11F23;KAWI LETTER DA;Lo;0;L;;;;;N;;;;;
11F24;KAWI LETTER DHA;Lo;0;L;;;;;N;;;;;
11F25;KAWI LETTER NA;Lo;0;L;;;;;N;;;;;
11F26;KAWI LETTER PA;Lo;0;L;;;;;N;;;;;
11F27;KAWI LETTER PHA;Lo;0;L;;;;;N;;;;;
11F28;KAWI LETTER BA;Lo;0;L;;;;;N;;;;;
11F29;KAWI LETTER BHA;Lo;0;L;;;;;N;;;;;
11F2A;KAWI LETTER MA;Lo;0;L;;;;;N;;;;;
11F2B;KAWI LETTER YA;Lo;0;L;;;;;N;;;;;
11F2C;KAWI LETTER RA;Lo;0;L;;;;;N;;;;;
11F2D;KAWI LETTER LA;Lo;0;L;;;;;N;;;;;
11F2E;KAWI LETTER WA;Lo;0;L;;;;;N;;;;;
11F2F;KAWI LETTER SHA;Lo;0;L;;;;;N;;;;;
11F30;KAWI LETTER SSA;Lo;0;L;;;;;N;;;;;
11F31;KAWI LETTER SA;Lo;0;L;;;;;N;;;;;
11F32;KAWI LETTER HA;Lo;0;L;;;;;N;;;;;
11F33;KAWI LETTER JNYA;Lo;0;L;;;;;N;;;;;
11F34;KAWI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
11F35;KAWI VOWEL SIGN ALTERNATE AA;Mc;0;L;;;;;N;;;;;
11F36;KAWI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
11F37;KAWI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
11F38;KAWI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
11F39;KAWI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
11F3A;KAWI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
11F3E;KAWI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
11F3F;KAWI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
11F40;KAWI VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;
11F41;KAWI SIGN KILLER;Mc;9;L;;;;;N;;;;;
11F42;KAWI CONJOINER;Mn;9;NSM;;;;;N;;;;;
11F43;KAWI DANDA;Po;0;L;;;;;N;;;;;
11F44;KAWI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
11F45;KAWI PUNCTUATION SECTION MARKER;Po;0;L;;;;;N;;;;;
11F46;KAWI PUNCTUATION ALTERNATE SECTION MARKER;Po;0;L;;;;;N;;;;;
11F47;KAWI PUNCTUATION FLOWER;Po;0;L;;;;;N;;;;;
11F48;KAWI PUNCTUATION SPACE FILLER;Po;0;L;;;;;N;;;;;
11F49;KAWI PUNCTUATION DOT;Po;0;L;;;;;N;;;;;
11F4A;KAWI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;;
11F4B;KAWI PUNCTUATION TRIPLE DOT;Po;0;L;;;;;N;;;;;
11F4C;KAWI PUNCTUATION CIRCLE;Po;0;L;;;;;N;;;;;
11F4D;KAWI PUNCTUATION FILLED CIRCLE;Po;0;L;;;;;N;;;;;
11F4E;KAWI PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;
11F4F;KAWI PUNCTUATION CLOSING SPIRAL;Po;0;L;;;;;N;;;;;
11F50;KAWI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
11F51;KAWI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
11F52;KAWI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
11F53;KAWI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
11F54;KAWI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
11F55;KAWI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
11F56;KAWI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
11F57;KAWI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
11F58;KAWI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
11F59;KAWI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;;
11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;;
11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;
@ -24144,7 +24040,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;;
1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;;
1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;;
1342F;EGYPTIAN HIEROGLYPH V011D;Lo;0;L;;;;;N;;;;;
13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;;
13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;;
13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;;
@ -24154,35 +24049,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;;
13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;;
13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;;
13439;EGYPTIAN HIEROGLYPH INSERT AT MIDDLE;Cf;0;L;;;;;N;;;;;
1343A;EGYPTIAN HIEROGLYPH INSERT AT TOP;Cf;0;L;;;;;N;;;;;
1343B;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM;Cf;0;L;;;;;N;;;;;
1343C;EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE;Cf;0;L;;;;;N;;;;;
1343D;EGYPTIAN HIEROGLYPH END ENCLOSURE;Cf;0;L;;;;;N;;;;;
1343E;EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;;
1343F;EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;;
13440;EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY;Mn;0;NSM;;;;;N;;;;;
13441;EGYPTIAN HIEROGLYPH FULL BLANK;Lo;0;L;;;;;N;;;;;
13442;EGYPTIAN HIEROGLYPH HALF BLANK;Lo;0;L;;;;;N;;;;;
13443;EGYPTIAN HIEROGLYPH LOST SIGN;Lo;0;L;;;;;N;;;;;
13444;EGYPTIAN HIEROGLYPH HALF LOST SIGN;Lo;0;L;;;;;N;;;;;
13445;EGYPTIAN HIEROGLYPH TALL LOST SIGN;Lo;0;L;;;;;N;;;;;
13446;EGYPTIAN HIEROGLYPH WIDE LOST SIGN;Lo;0;L;;;;;N;;;;;
13447;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START;Mn;0;NSM;;;;;N;;;;;
13448;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START;Mn;0;NSM;;;;;N;;;;;
13449;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START;Mn;0;NSM;;;;;N;;;;;
1344A;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP END;Mn;0;NSM;;;;;N;;;;;
1344B;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP;Mn;0;NSM;;;;;N;;;;;
1344C;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START AND TOP END;Mn;0;NSM;;;;;N;;;;;
1344D;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND TOP;Mn;0;NSM;;;;;N;;;;;
1344E;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM END;Mn;0;NSM;;;;;N;;;;;
1344F;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START AND BOTTOM END;Mn;0;NSM;;;;;N;;;;;
13450;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM;Mn;0;NSM;;;;;N;;;;;
13451;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM;Mn;0;NSM;;;;;N;;;;;
13452;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT END;Mn;0;NSM;;;;;N;;;;;
13453;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END;Mn;0;NSM;;;;;N;;;;;
13454;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END;Mn;0;NSM;;;;;N;;;;;
13455;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED;Mn;0;NSM;;;;;N;;;;;
14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
@ -27423,11 +27289,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;;
1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;
1B132;HIRAGANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;;
1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;
1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;
1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;
1B155;KATAKANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;;
1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;
1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;
1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;
@ -28709,26 +28573,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
1D2C0;KAKTOVIK NUMERAL ZERO;No;0;L;;;;0;N;;;;;
1D2C1;KAKTOVIK NUMERAL ONE;No;0;L;;;;1;N;;;;;
1D2C2;KAKTOVIK NUMERAL TWO;No;0;L;;;;2;N;;;;;
1D2C3;KAKTOVIK NUMERAL THREE;No;0;L;;;;3;N;;;;;
1D2C4;KAKTOVIK NUMERAL FOUR;No;0;L;;;;4;N;;;;;
1D2C5;KAKTOVIK NUMERAL FIVE;No;0;L;;;;5;N;;;;;
1D2C6;KAKTOVIK NUMERAL SIX;No;0;L;;;;6;N;;;;;
1D2C7;KAKTOVIK NUMERAL SEVEN;No;0;L;;;;7;N;;;;;
1D2C8;KAKTOVIK NUMERAL EIGHT;No;0;L;;;;8;N;;;;;
1D2C9;KAKTOVIK NUMERAL NINE;No;0;L;;;;9;N;;;;;
1D2CA;KAKTOVIK NUMERAL TEN;No;0;L;;;;10;N;;;;;
1D2CB;KAKTOVIK NUMERAL ELEVEN;No;0;L;;;;11;N;;;;;
1D2CC;KAKTOVIK NUMERAL TWELVE;No;0;L;;;;12;N;;;;;
1D2CD;KAKTOVIK NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;;
1D2CE;KAKTOVIK NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;;
1D2CF;KAKTOVIK NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;;
1D2D0;KAKTOVIK NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;;
1D2D1;KAKTOVIK NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;;
1D2D2;KAKTOVIK NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;;
1D2D3;KAKTOVIK NUMERAL NINETEEN;No;0;L;;;;19;N;;;;;
1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;;
1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;;
1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;;
@ -30560,12 +30404,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;;
1DF25;LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;
1DF26;LATIN SMALL LETTER L WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;
1DF27;LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;
1DF28;LATIN SMALL LETTER R WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;
1DF29;LATIN SMALL LETTER S WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;
1DF2A;LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;
1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;;
1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;;
1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;;
@ -30604,69 +30442,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;;
1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
1E030;MODIFIER LETTER CYRILLIC SMALL A;Lm;0;L;<super> 0430;;;;N;;;;;
1E031;MODIFIER LETTER CYRILLIC SMALL BE;Lm;0;L;<super> 0431;;;;N;;;;;
1E032;MODIFIER LETTER CYRILLIC SMALL VE;Lm;0;L;<super> 0432;;;;N;;;;;
1E033;MODIFIER LETTER CYRILLIC SMALL GHE;Lm;0;L;<super> 0433;;;;N;;;;;
1E034;MODIFIER LETTER CYRILLIC SMALL DE;Lm;0;L;<super> 0434;;;;N;;;;;
1E035;MODIFIER LETTER CYRILLIC SMALL IE;Lm;0;L;<super> 0435;;;;N;;;;;
1E036;MODIFIER LETTER CYRILLIC SMALL ZHE;Lm;0;L;<super> 0436;;;;N;;;;;
1E037;MODIFIER LETTER CYRILLIC SMALL ZE;Lm;0;L;<super> 0437;;;;N;;;;;
1E038;MODIFIER LETTER CYRILLIC SMALL I;Lm;0;L;<super> 0438;;;;N;;;;;
1E039;MODIFIER LETTER CYRILLIC SMALL KA;Lm;0;L;<super> 043A;;;;N;;;;;
1E03A;MODIFIER LETTER CYRILLIC SMALL EL;Lm;0;L;<super> 043B;;;;N;;;;;
1E03B;MODIFIER LETTER CYRILLIC SMALL EM;Lm;0;L;<super> 043C;;;;N;;;;;
1E03C;MODIFIER LETTER CYRILLIC SMALL O;Lm;0;L;<super> 043E;;;;N;;;;;
1E03D;MODIFIER LETTER CYRILLIC SMALL PE;Lm;0;L;<super> 043F;;;;N;;;;;
1E03E;MODIFIER LETTER CYRILLIC SMALL ER;Lm;0;L;<super> 0440;;;;N;;;;;
1E03F;MODIFIER LETTER CYRILLIC SMALL ES;Lm;0;L;<super> 0441;;;;N;;;;;
1E040;MODIFIER LETTER CYRILLIC SMALL TE;Lm;0;L;<super> 0442;;;;N;;;;;
1E041;MODIFIER LETTER CYRILLIC SMALL U;Lm;0;L;<super> 0443;;;;N;;;;;
1E042;MODIFIER LETTER CYRILLIC SMALL EF;Lm;0;L;<super> 0444;;;;N;;;;;
1E043;MODIFIER LETTER CYRILLIC SMALL HA;Lm;0;L;<super> 0445;;;;N;;;;;
1E044;MODIFIER LETTER CYRILLIC SMALL TSE;Lm;0;L;<super> 0446;;;;N;;;;;
1E045;MODIFIER LETTER CYRILLIC SMALL CHE;Lm;0;L;<super> 0447;;;;N;;;;;
1E046;MODIFIER LETTER CYRILLIC SMALL SHA;Lm;0;L;<super> 0448;;;;N;;;;;
1E047;MODIFIER LETTER CYRILLIC SMALL YERU;Lm;0;L;<super> 044B;;;;N;;;;;
1E048;MODIFIER LETTER CYRILLIC SMALL E;Lm;0;L;<super> 044D;;;;N;;;;;
1E049;MODIFIER LETTER CYRILLIC SMALL YU;Lm;0;L;<super> 044E;;;;N;;;;;
1E04A;MODIFIER LETTER CYRILLIC SMALL DZZE;Lm;0;L;<super> A689;;;;N;;;;;
1E04B;MODIFIER LETTER CYRILLIC SMALL SCHWA;Lm;0;L;<super> 04D9;;;;N;;;;;
1E04C;MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I;Lm;0;L;<super> 0456;;;;N;;;;;
1E04D;MODIFIER LETTER CYRILLIC SMALL JE;Lm;0;L;<super> 0458;;;;N;;;;;
1E04E;MODIFIER LETTER CYRILLIC SMALL BARRED O;Lm;0;L;<super> 04E9;;;;N;;;;;
1E04F;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U;Lm;0;L;<super> 04AF;;;;N;;;;;
1E050;MODIFIER LETTER CYRILLIC SMALL PALOCHKA;Lm;0;L;<super> 04CF;;;;N;;;;;
1E051;CYRILLIC SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0430;;;;N;;;;;
1E052;CYRILLIC SUBSCRIPT SMALL LETTER BE;Lm;0;L;<sub> 0431;;;;N;;;;;
1E053;CYRILLIC SUBSCRIPT SMALL LETTER VE;Lm;0;L;<sub> 0432;;;;N;;;;;
1E054;CYRILLIC SUBSCRIPT SMALL LETTER GHE;Lm;0;L;<sub> 0433;;;;N;;;;;
1E055;CYRILLIC SUBSCRIPT SMALL LETTER DE;Lm;0;L;<sub> 0434;;;;N;;;;;
1E056;CYRILLIC SUBSCRIPT SMALL LETTER IE;Lm;0;L;<sub> 0435;;;;N;;;;;
1E057;CYRILLIC SUBSCRIPT SMALL LETTER ZHE;Lm;0;L;<sub> 0436;;;;N;;;;;
1E058;CYRILLIC SUBSCRIPT SMALL LETTER ZE;Lm;0;L;<sub> 0437;;;;N;;;;;
1E059;CYRILLIC SUBSCRIPT SMALL LETTER I;Lm;0;L;<sub> 0438;;;;N;;;;;
1E05A;CYRILLIC SUBSCRIPT SMALL LETTER KA;Lm;0;L;<sub> 043A;;;;N;;;;;
1E05B;CYRILLIC SUBSCRIPT SMALL LETTER EL;Lm;0;L;<sub> 043B;;;;N;;;;;
1E05C;CYRILLIC SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 043E;;;;N;;;;;
1E05D;CYRILLIC SUBSCRIPT SMALL LETTER PE;Lm;0;L;<sub> 043F;;;;N;;;;;
1E05E;CYRILLIC SUBSCRIPT SMALL LETTER ES;Lm;0;L;<sub> 0441;;;;N;;;;;
1E05F;CYRILLIC SUBSCRIPT SMALL LETTER U;Lm;0;L;<sub> 0443;;;;N;;;;;
1E060;CYRILLIC SUBSCRIPT SMALL LETTER EF;Lm;0;L;<sub> 0444;;;;N;;;;;
1E061;CYRILLIC SUBSCRIPT SMALL LETTER HA;Lm;0;L;<sub> 0445;;;;N;;;;;
1E062;CYRILLIC SUBSCRIPT SMALL LETTER TSE;Lm;0;L;<sub> 0446;;;;N;;;;;
1E063;CYRILLIC SUBSCRIPT SMALL LETTER CHE;Lm;0;L;<sub> 0447;;;;N;;;;;
1E064;CYRILLIC SUBSCRIPT SMALL LETTER SHA;Lm;0;L;<sub> 0448;;;;N;;;;;
1E065;CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN;Lm;0;L;<sub> 044A;;;;N;;;;;
1E066;CYRILLIC SUBSCRIPT SMALL LETTER YERU;Lm;0;L;<sub> 044B;;;;N;;;;;
1E067;CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN;Lm;0;L;<sub> 0491;;;;N;;;;;
1E068;CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Lm;0;L;<sub> 0456;;;;N;;;;;
1E069;CYRILLIC SUBSCRIPT SMALL LETTER DZE;Lm;0;L;<sub> 0455;;;;N;;;;;
1E06A;CYRILLIC SUBSCRIPT SMALL LETTER DZHE;Lm;0;L;<sub> 045F;;;;N;;;;;
1E06B;MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER;Lm;0;L;<super> 04AB;;;;N;;;;;
1E06C;MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER;Lm;0;L;<super> A651;;;;N;;;;;
1E06D;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE;Lm;0;L;<super> 04B1;;;;N;;;;;
1E08F;COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Mn;230;NSM;;;;;N;;;;;
1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;;
1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;;
1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;;
@ -30828,48 +30603,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;;
1E4D0;NAG MUNDARI LETTER O;Lo;0;L;;;;;N;;;;;
1E4D1;NAG MUNDARI LETTER OP;Lo;0;L;;;;;N;;;;;
1E4D2;NAG MUNDARI LETTER OL;Lo;0;L;;;;;N;;;;;
1E4D3;NAG MUNDARI LETTER OY;Lo;0;L;;;;;N;;;;;
1E4D4;NAG MUNDARI LETTER ONG;Lo;0;L;;;;;N;;;;;
1E4D5;NAG MUNDARI LETTER A;Lo;0;L;;;;;N;;;;;
1E4D6;NAG MUNDARI LETTER AJ;Lo;0;L;;;;;N;;;;;
1E4D7;NAG MUNDARI LETTER AB;Lo;0;L;;;;;N;;;;;
1E4D8;NAG MUNDARI LETTER ANY;Lo;0;L;;;;;N;;;;;
1E4D9;NAG MUNDARI LETTER AH;Lo;0;L;;;;;N;;;;;
1E4DA;NAG MUNDARI LETTER I;Lo;0;L;;;;;N;;;;;
1E4DB;NAG MUNDARI LETTER IS;Lo;0;L;;;;;N;;;;;
1E4DC;NAG MUNDARI LETTER IDD;Lo;0;L;;;;;N;;;;;
1E4DD;NAG MUNDARI LETTER IT;Lo;0;L;;;;;N;;;;;
1E4DE;NAG MUNDARI LETTER IH;Lo;0;L;;;;;N;;;;;
1E4DF;NAG MUNDARI LETTER U;Lo;0;L;;;;;N;;;;;
1E4E0;NAG MUNDARI LETTER UC;Lo;0;L;;;;;N;;;;;
1E4E1;NAG MUNDARI LETTER UD;Lo;0;L;;;;;N;;;;;
1E4E2;NAG MUNDARI LETTER UK;Lo;0;L;;;;;N;;;;;
1E4E3;NAG MUNDARI LETTER UR;Lo;0;L;;;;;N;;;;;
1E4E4;NAG MUNDARI LETTER E;Lo;0;L;;;;;N;;;;;
1E4E5;NAG MUNDARI LETTER ENN;Lo;0;L;;;;;N;;;;;
1E4E6;NAG MUNDARI LETTER EG;Lo;0;L;;;;;N;;;;;
1E4E7;NAG MUNDARI LETTER EM;Lo;0;L;;;;;N;;;;;
1E4E8;NAG MUNDARI LETTER EN;Lo;0;L;;;;;N;;;;;
1E4E9;NAG MUNDARI LETTER ETT;Lo;0;L;;;;;N;;;;;
1E4EA;NAG MUNDARI LETTER ELL;Lo;0;L;;;;;N;;;;;
1E4EB;NAG MUNDARI SIGN OJOD;Lm;0;L;;;;;N;;;;;
1E4EC;NAG MUNDARI SIGN MUHOR;Mn;232;NSM;;;;;N;;;;;
1E4ED;NAG MUNDARI SIGN TOYOR;Mn;232;NSM;;;;;N;;;;;
1E4EE;NAG MUNDARI SIGN IKIR;Mn;220;NSM;;;;;N;;;;;
1E4EF;NAG MUNDARI SIGN SUTUH;Mn;230;NSM;;;;;N;;;;;
1E4F0;NAG MUNDARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
1E4F1;NAG MUNDARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
1E4F2;NAG MUNDARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
1E4F3;NAG MUNDARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
1E4F4;NAG MUNDARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
1E4F5;NAG MUNDARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
1E4F6;NAG MUNDARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
1E4F7;NAG MUNDARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
1E4F8;NAG MUNDARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
1E4F9;NAG MUNDARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;;
1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;;
1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;;
@ -32945,7 +32678,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
1F6D6;HUT;So;0;ON;;;;;N;;;;;
1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;
1F6DC;WIRELESS;So;0;ON;;;;;N;;;;;
1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;;
1F6DE;WHEEL;So;0;ON;;;;;N;;;;;
1F6DF;RING BUOY;So;0;ON;;;;;N;;;;;
@ -33091,14 +32823,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;;
1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;;
1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;;
1F774;LOT OF FORTUNE;So;0;ON;;;;;N;;;;;
1F775;OCCULTATION;So;0;ON;;;;;N;;;;;
1F776;LUNAR ECLIPSE;So;0;ON;;;;;N;;;;;
1F77B;HAUMEA;So;0;ON;;;;;N;;;;;
1F77C;MAKEMAKE;So;0;ON;;;;;N;;;;;
1F77D;GONGGONG;So;0;ON;;;;;N;;;;;
1F77E;QUAOAR;So;0;ON;;;;;N;;;;;
1F77F;ORCUS;So;0;ON;;;;;N;;;;;
1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
@ -33188,7 +32912,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;
1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;;
1F7D9;NINE POINTED WHITE STAR;So;0;ON;;;;;N;;;;;
1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;;
1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;;
1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;;
@ -33711,9 +33434,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FA72;BRIEFS;So;0;ON;;;;;N;;;;;
1FA73;SHORTS;So;0;ON;;;;;N;;;;;
1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;;
1FA75;LIGHT BLUE HEART;So;0;ON;;;;;N;;;;;
1FA76;GREY HEART;So;0;ON;;;;;N;;;;;
1FA77;PINK HEART;So;0;ON;;;;;N;;;;;
1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;
@ -33726,8 +33446,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;;
1FA85;PINATA;So;0;ON;;;;;N;;;;;
1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;;
1FA87;MARACAS;So;0;ON;;;;;N;;;;;
1FA88;FLUTE;So;0;ON;;;;;N;;;;;
1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;;
1FA91;CHAIR;So;0;ON;;;;;N;;;;;
1FA92;RAZOR;So;0;ON;;;;;N;;;;;
@ -33757,9 +33475,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;;
1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;;
1FAAC;HAMSA;So;0;ON;;;;;N;;;;;
1FAAD;FOLDING HAND FAN;So;0;ON;;;;;N;;;;;
1FAAE;HAIR PICK;So;0;ON;;;;;N;;;;;
1FAAF;KHANDA;So;0;ON;;;;;N;;;;;
1FAB0;FLY;So;0;ON;;;;;N;;;;;
1FAB1;WORM;So;0;ON;;;;;N;;;;;
1FAB2;BEETLE;So;0;ON;;;;;N;;;;;
@ -33771,18 +33486,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAB8;CORAL;So;0;ON;;;;;N;;;;;
1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;;
1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;;
1FABB;HYACINTH;So;0;ON;;;;;N;;;;;
1FABC;JELLYFISH;So;0;ON;;;;;N;;;;;
1FABD;WING;So;0;ON;;;;;N;;;;;
1FABF;GOOSE;So;0;ON;;;;;N;;;;;
1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;
1FAC1;LUNGS;So;0;ON;;;;;N;;;;;
1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;
1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;;
1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;;
1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;;
1FACE;MOOSE;So;0;ON;;;;;N;;;;;
1FACF;DONKEY;So;0;ON;;;;;N;;;;;
1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;
1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;
1FAD2;OLIVE;So;0;ON;;;;;N;;;;;
@ -33793,8 +33502,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;;
1FAD8;BEANS;So;0;ON;;;;;N;;;;;
1FAD9;JAR;So;0;ON;;;;;N;;;;;
1FADA;GINGER ROOT;So;0;ON;;;;;N;;;;;
1FADB;PEA POD;So;0;ON;;;;;N;;;;;
1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;;
1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;;
1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;;
@ -33803,7 +33510,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;;
1FAE6;BITING LIP;So;0;ON;;;;;N;;;;;
1FAE7;BUBBLES;So;0;ON;;;;;N;;;;;
1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;;
1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;;
1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;;
1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;;
@ -33811,8 +33517,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;;
1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;;
1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;;
1FAF7;LEFTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;;
1FAF8;RIGHTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;;
1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;
1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;
1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;
@ -34028,7 +33732,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
2A6DF;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
2B739;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
2B738;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;
@ -34579,8 +34283,6 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
30000;<CJK Ideograph Extension G, First>;Lo;0;L;;;;;N;;;;;
3134A;<CJK Ideograph Extension G, Last>;Lo;0;L;;;;;N;;;;;
31350;<CJK Ideograph Extension H, First>;Lo;0;L;;;;;N;;;;;
323AF;<CJK Ideograph Extension H, Last>;Lo;0;L;;;;;N;;;;;
E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;

View file

@ -23,7 +23,7 @@
### Commentary:
## This script takes as input Unicode's Blocks.txt
## (https://www.unicode.org/Public/UNIDATA/Blocks.txt)
## (http://www.unicode.org/Public/UNIDATA/Blocks.txt)
## and produces output for Emacs's lisp/international/charscript.el.
## It lumps together all the blocks belonging to the same language.
@ -98,7 +98,7 @@ function name2alias(name , w, w2) {
else if (name ~ /arabic/) return "arabic"
else if (name ~ /^greek/) return "greek"
else if (name ~ /^coptic/) return "coptic"
else if (name ~ /cuneiform number/) return "cuneiform"
else if (name ~ /cuneiform number/) return "cuneiform-numbers-and-punctuation"
else if (name ~ /cuneiform/) return "cuneiform"
else if (name ~ /mathematical alphanumeric symbol/) return "mathematical"
else if (name ~ /punctuation|mathematical|arrows|currency|superscript|small form variants|geometric|dingbats|enclosed|alchemical|pictograph|emoticon|transport/) return "symbol"
@ -113,11 +113,9 @@ function name2alias(name , w, w2) {
else if (name ~/^(specials|tags)$/) return 0
else if (name ~ /linear b/) return "linear-b"
else if (name ~ /aramaic/) return "aramaic"
else if (name ~ /rumi num/) return "arabic"
else if (name ~ /rumi num/) return "rumi-number"
else if (name ~ /duployan|shorthand/) return "duployan-shorthand"
else if (name ~ /sutton signwriting/) return "sutton-sign-writing"
else if (name ~ /sinhala archaic number/) return "sinhala"
else if (name ~ /tangut components/) return "tangut"
sub(/^small /, "", name)
sub(/ (extended|extensions*|supplement).*/, "", name)
@ -224,14 +222,9 @@ FILENAME ~ "emoji-data.txt" && /^[0-9A-F].*; Emoji_Presentation / {
END {
idx = 0
## This is here so that font_range can choose Emoji presentation
## for the preceding codepoint when it encounters a VS-16
## (U+FE0F). See also font_range and the comments in composite.el
## around the setup of `composition-function-table' for
## U+FE00..U+FE0E.
## It originally covered the whole FE00-FE0F range, but that
## turned out to be a mistake.
override_start[idx] = "FE0F"
# ## These are here so that font_range can choose Emoji presentation
# ## for the preceding codepoint when it encounters a VS
override_start[idx] = "FE00"
override_end[idx] = "FE0F"
for (k in override_start)

File diff suppressed because it is too large Load diff

View file

@ -13,7 +13,7 @@
<title>Unicode Terms of Use</title>
<link rel="stylesheet" type="text/css"
href="https://www.unicode.org/webscripts/standard_styles.css">
href="http://www.unicode.org/webscripts/standard_styles.css">
<style type="text/css">
pre {
@ -32,8 +32,8 @@
<td colspan="2">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="icon" style="width:38px; height:35px"><a href="https://www.unicode.org/"><img border="0"
src="https://www.unicode.org/webscripts/logo60s2.gif" align="middle" alt="[Unicode]" width="34" height="33"></a></td>
<td class="icon" style="width:38px; height:35px"><a href="http://www.unicode.org/"><img border="0"
src="http://www.unicode.org/webscripts/logo60s2.gif" align="middle" alt="[Unicode]" width="34" height="33"></a></td>
<td class="icon" style="vertical-align:middle;"> &nbsp;<a class="bar"
href="https://www.unicode.org/copyright.html"><font size="3">Terms of Use</font></a></td>
<td class="bar"><a href="https://www.unicode.org/main.html" class="bar">Tech Site</a>
@ -82,7 +82,7 @@
</tr>
<tr>
<td valign="top" class="navColCell">
<a href="https://www.unicode.org/license.txt">Unicode Data Files and Software License</a></td>
<a href="https://www.unicode.org/license.html">Unicode Data Files and Software License</a></td>
</tr>
<tr>
<td class="navColTitle">Related Links</td>
@ -112,13 +112,13 @@ <h1>Unicode® Copyright and Terms of Use</h1>
<p>For the general privacy policy governing access to this site, see
the&nbsp;
<a href="https://www.unicode.org/policies/privacy_policy.html">
<a href="http://www.unicode.org/policies/privacy_policy.html">
Unicode Privacy Policy</a>.</p>
<ol type="A">
<li><u><a name="1"></a>Unicode Copyright</u>
<ol>
<li>Copyright © 1991-2022 Unicode, Inc. All rights reserved.</li>
<li>Copyright © 1991-2021 Unicode, Inc. All rights reserved.</li>
</ol>
</li>
@ -153,12 +153,12 @@ <h1>Unicode® Copyright and Terms of Use</h1>
herein.</li>
<li>Further specifications of rights and restrictions pertaining
to the use of the Unicode DATA FILES and SOFTWARE can be found in the
<a href="https://www.unicode.org/license.txt">Unicode Data Files and Software License</a>.</li>
<a href="https://www.unicode.org/license.html">Unicode Data Files and Software License</a>.</li>
<li>Each version of the Unicode Standard has further
specifications of rights and restrictions of use. For the book
editions (Unicode 5.0 and earlier), these are found on the back
of the
<a href="https://www.unicode.org/versions/Unicode5.0.0/Title.pdf">title page</a>.</li>
<a href="http://www.unicode.org/versions/Unicode5.0.0/Title.pdf">title page</a>.</li>
<li>
The Unicode PDF <a href="https://www.unicode.org/charts/">online code charts</a> carry specific restrictions. Those restrictions are incorporated as the
first page of each PDF code chart.</li>
@ -224,7 +224,7 @@ <h1>Unicode® Copyright and Terms of Use</h1>
<li><u><a name="5"></a>Trademarks &amp; Logos</u>
<ol>
<li>The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names.</li>
<li><a href="https://www.unicode.org/policies/logo_policy.html">The Unicode Consortium Name and Trademark Usage Policy</a> (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc.</li>
<li><a href="http://www.unicode.org/policies/logo_policy.html">The Unicode Consortium Name and Trademark Usage Policy</a> (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc.</li>
<li>All third party trademarks referenced herein are the property of their respective owners.</li>
</ol>
</li>
@ -270,15 +270,15 @@ <h1>Unicode® Copyright and Terms of Use</h1>
<center>
<table cellspacing="0" cellpadding="0" border="0" id="table2">
<tr>
<td><a href="https://www.unicode.org/copyright.html">
<img src="https://www.unicode.org/img/hb_notice.gif"
<td><a href="http://www.unicode.org/copyright.html">
<img src="http://www.unicode.org/img/hb_notice.gif"
border="0" alt="Access to Copyright and terms of use"
width="216" height="50"></a></td>
</tr>
</table>
<script language="Javascript" type="text/javascript"
src="https://www.unicode.org/webscripts/lastModified.js">
src="http://www.unicode.org/webscripts/lastModified.js">
</script>
</center>

View file

@ -1,13 +1,13 @@
# emoji-data.txt
# Date: 2022-08-02, 00:26:10 GMT
# © 2022 Unicode®, Inc.
# emoji-data-14.0.0.txt
# Date: 2021-08-26, 17:22:22 GMT
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Emoji Data for UTS #51
# Used with Emoji Version 15.0 and subsequent minor revisions (if any)
# Used with Emoji Version 14.0 and subsequent minor revisions (if any)
#
# For documentation and usage, see https://www.unicode.org/reports/tr51
# For documentation and usage, see http://www.unicode.org/reports/tr51
#
# Format:
# <codepoint(s)> ; <property> # <comments>
@ -20,6 +20,7 @@
# ================================================
# All omitted code points have Emoji=No
# @missing: 0000..10FFFF ; Emoji ; No
0023 ; Emoji # E0.0 [1] (#) hash sign
002A ; Emoji # E0.0 [1] (*) asterisk
@ -340,7 +341,6 @@
1F6D1..1F6D2 ; Emoji # E3.0 [2] (🛑..🛒) stop sign..shopping cart
1F6D5 ; Emoji # E12.0 [1] (🛕) hindu temple
1F6D6..1F6D7 ; Emoji # E13.0 [2] (🛖..🛗) hut..elevator
1F6DC ; Emoji # E15.0 [1] (🛜) wireless
1F6DD..1F6DF ; Emoji # E14.0 [3] (🛝..🛟) playground slide..ring buoy
1F6E0..1F6E5 ; Emoji # E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat
1F6E9 ; Emoji # E0.7 [1] (🛩️) small airplane
@ -401,36 +401,28 @@
1F9E7..1F9FF ; Emoji # E11.0 [25] (🧧..🧿) red envelope..nazar amulet
1FA70..1FA73 ; Emoji # E12.0 [4] (🩰..🩳) ballet shoes..shorts
1FA74 ; Emoji # E13.0 [1] (🩴) thong sandal
1FA75..1FA77 ; Emoji # E15.0 [3] (🩵..🩷) light blue heart..pink heart
1FA78..1FA7A ; Emoji # E12.0 [3] (🩸..🩺) drop of blood..stethoscope
1FA7B..1FA7C ; Emoji # E14.0 [2] (🩻..🩼) x-ray..crutch
1FA80..1FA82 ; Emoji # E12.0 [3] (🪀..🪂) yo-yo..parachute
1FA83..1FA86 ; Emoji # E13.0 [4] (🪃..🪆) boomerang..nesting dolls
1FA87..1FA88 ; Emoji # E15.0 [2] (🪇..🪈) maracas..flute
1FA90..1FA95 ; Emoji # E12.0 [6] (🪐..🪕) ringed planet..banjo
1FA96..1FAA8 ; Emoji # E13.0 [19] (🪖..🪨) military helmet..rock
1FAA9..1FAAC ; Emoji # E14.0 [4] (🪩..🪬) mirror ball..hamsa
1FAAD..1FAAF ; Emoji # E15.0 [3] (🪭..🪯) folding hand fan..khanda
1FAB0..1FAB6 ; Emoji # E13.0 [7] (🪰..🪶) fly..feather
1FAB7..1FABA ; Emoji # E14.0 [4] (🪷..🪺) lotus..nest with eggs
1FABB..1FABD ; Emoji # E15.0 [3] (🪻..🪽) hyacinth..wing
1FABF ; Emoji # E15.0 [1] (🪿) goose
1FAC0..1FAC2 ; Emoji # E13.0 [3] (🫀..🫂) anatomical heart..people hugging
1FAC3..1FAC5 ; Emoji # E14.0 [3] (🫃..🫅) pregnant man..person with crown
1FACE..1FACF ; Emoji # E15.0 [2] (🫎..🫏) moose..donkey
1FAD0..1FAD6 ; Emoji # E13.0 [7] (🫐..🫖) blueberries..teapot
1FAD7..1FAD9 ; Emoji # E14.0 [3] (🫗..🫙) pouring liquid..jar
1FADA..1FADB ; Emoji # E15.0 [2] (🫚..🫛) ginger root..pea pod
1FAE0..1FAE7 ; Emoji # E14.0 [8] (🫠..🫧) melting face..bubbles
1FAE8 ; Emoji # E15.0 [1] (🫨) shaking face
1FAF0..1FAF6 ; Emoji # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands
1FAF7..1FAF8 ; Emoji # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand
# Total elements: 1424
# Total elements: 1404
# ================================================
# All omitted code points have Emoji_Presentation=No
# @missing: 0000..10FFFF ; Emoji_Presentation ; No
231A..231B ; Emoji_Presentation # E0.6 [2] (⌚..⌛) watch..hourglass done
23E9..23EC ; Emoji_Presentation # E0.6 [4] (⏩..⏬) fast-forward button..fast down button
@ -633,7 +625,6 @@
1F6D1..1F6D2 ; Emoji_Presentation # E3.0 [2] (🛑..🛒) stop sign..shopping cart
1F6D5 ; Emoji_Presentation # E12.0 [1] (🛕) hindu temple
1F6D6..1F6D7 ; Emoji_Presentation # E13.0 [2] (🛖..🛗) hut..elevator
1F6DC ; Emoji_Presentation # E15.0 [1] (🛜) wireless
1F6DD..1F6DF ; Emoji_Presentation # E14.0 [3] (🛝..🛟) playground slide..ring buoy
1F6EB..1F6EC ; Emoji_Presentation # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival
1F6F4..1F6F6 ; Emoji_Presentation # E3.0 [3] (🛴..🛶) kick scooter..canoe
@ -690,36 +681,28 @@
1F9E7..1F9FF ; Emoji_Presentation # E11.0 [25] (🧧..🧿) red envelope..nazar amulet
1FA70..1FA73 ; Emoji_Presentation # E12.0 [4] (🩰..🩳) ballet shoes..shorts
1FA74 ; Emoji_Presentation # E13.0 [1] (🩴) thong sandal
1FA75..1FA77 ; Emoji_Presentation # E15.0 [3] (🩵..🩷) light blue heart..pink heart
1FA78..1FA7A ; Emoji_Presentation # E12.0 [3] (🩸..🩺) drop of blood..stethoscope
1FA7B..1FA7C ; Emoji_Presentation # E14.0 [2] (🩻..🩼) x-ray..crutch
1FA80..1FA82 ; Emoji_Presentation # E12.0 [3] (🪀..🪂) yo-yo..parachute
1FA83..1FA86 ; Emoji_Presentation # E13.0 [4] (🪃..🪆) boomerang..nesting dolls
1FA87..1FA88 ; Emoji_Presentation # E15.0 [2] (🪇..🪈) maracas..flute
1FA90..1FA95 ; Emoji_Presentation # E12.0 [6] (🪐..🪕) ringed planet..banjo
1FA96..1FAA8 ; Emoji_Presentation # E13.0 [19] (🪖..🪨) military helmet..rock
1FAA9..1FAAC ; Emoji_Presentation # E14.0 [4] (🪩..🪬) mirror ball..hamsa
1FAAD..1FAAF ; Emoji_Presentation # E15.0 [3] (🪭..🪯) folding hand fan..khanda
1FAB0..1FAB6 ; Emoji_Presentation # E13.0 [7] (🪰..🪶) fly..feather
1FAB7..1FABA ; Emoji_Presentation # E14.0 [4] (🪷..🪺) lotus..nest with eggs
1FABB..1FABD ; Emoji_Presentation # E15.0 [3] (🪻..🪽) hyacinth..wing
1FABF ; Emoji_Presentation # E15.0 [1] (🪿) goose
1FAC0..1FAC2 ; Emoji_Presentation # E13.0 [3] (🫀..🫂) anatomical heart..people hugging
1FAC3..1FAC5 ; Emoji_Presentation # E14.0 [3] (🫃..🫅) pregnant man..person with crown
1FACE..1FACF ; Emoji_Presentation # E15.0 [2] (🫎..🫏) moose..donkey
1FAD0..1FAD6 ; Emoji_Presentation # E13.0 [7] (🫐..🫖) blueberries..teapot
1FAD7..1FAD9 ; Emoji_Presentation # E14.0 [3] (🫗..🫙) pouring liquid..jar
1FADA..1FADB ; Emoji_Presentation # E15.0 [2] (🫚..🫛) ginger root..pea pod
1FAE0..1FAE7 ; Emoji_Presentation # E14.0 [8] (🫠..🫧) melting face..bubbles
1FAE8 ; Emoji_Presentation # E15.0 [1] (🫨) shaking face
1FAF0..1FAF6 ; Emoji_Presentation # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands
1FAF7..1FAF8 ; Emoji_Presentation # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand
# Total elements: 1205
# Total elements: 1185
# ================================================
# All omitted code points have Emoji_Modifier=No
# @missing: 0000..10FFFF ; Emoji_Modifier ; No
1F3FB..1F3FF ; Emoji_Modifier # E1.0 [5] (🏻..🏿) light skin tone..dark skin tone
@ -728,6 +711,7 @@
# ================================================
# All omitted code points have Emoji_Modifier_Base=No
# @missing: 0000..10FFFF ; Emoji_Modifier_Base ; No
261D ; Emoji_Modifier_Base # E0.6 [1] (☝️) index pointing up
26F9 ; Emoji_Modifier_Base # E0.7 [1] (⛹️) person bouncing ball
@ -778,13 +762,13 @@
1F9D1..1F9DD ; Emoji_Modifier_Base # E5.0 [13] (🧑..🧝) person..elf
1FAC3..1FAC5 ; Emoji_Modifier_Base # E14.0 [3] (🫃..🫅) pregnant man..person with crown
1FAF0..1FAF6 ; Emoji_Modifier_Base # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands
1FAF7..1FAF8 ; Emoji_Modifier_Base # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand
# Total elements: 134
# Total elements: 132
# ================================================
# All omitted code points have Emoji_Component=No
# @missing: 0000..10FFFF ; Emoji_Component ; No
0023 ; Emoji_Component # E0.0 [1] (#) hash sign
002A ; Emoji_Component # E0.0 [1] (*) asterisk
@ -802,6 +786,7 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c
# ================================================
# All omitted code points have Extended_Pictographic=No
# @missing: 0000..10FFFF ; Extended_Pictographic ; No
00A9 ; Extended_Pictographic# E0.6 [1] (©️) copyright
00AE ; Extended_Pictographic# E0.6 [1] (®️) registered
@ -1205,8 +1190,7 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c
1F6D3..1F6D4 ; Extended_Pictographic# E0.0 [2] (🛓..🛔) STUPA..PAGODA
1F6D5 ; Extended_Pictographic# E12.0 [1] (🛕) hindu temple
1F6D6..1F6D7 ; Extended_Pictographic# E13.0 [2] (🛖..🛗) hut..elevator
1F6D8..1F6DB ; Extended_Pictographic# E0.0 [4] (🛘..🛛) <reserved-1F6D8>..<reserved-1F6DB>
1F6DC ; Extended_Pictographic# E15.0 [1] (🛜) wireless
1F6D8..1F6DC ; Extended_Pictographic# E0.0 [5] (🛘..🛜) <reserved-1F6D8>..<reserved-1F6DC>
1F6DD..1F6DF ; Extended_Pictographic# E14.0 [3] (🛝..🛟) playground slide..ring buoy
1F6E0..1F6E5 ; Extended_Pictographic# E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat
1F6E6..1F6E8 ; Extended_Pictographic# E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE
@ -1223,7 +1207,7 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c
1F6FA ; Extended_Pictographic# E12.0 [1] (🛺) auto rickshaw
1F6FB..1F6FC ; Extended_Pictographic# E13.0 [2] (🛻..🛼) pickup truck..roller skate
1F6FD..1F6FF ; Extended_Pictographic# E0.0 [3] (🛽..🛿) <reserved-1F6FD>..<reserved-1F6FF>
1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS
1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) <reserved-1F774>..<reserved-1F77F>
1F7D5..1F7DF ; Extended_Pictographic# E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE..<reserved-1F7DF>
1F7E0..1F7EB ; Extended_Pictographic# E12.0 [12] (🟠..🟫) orange circle..brown square
1F7EC..1F7EF ; Extended_Pictographic# E0.0 [4] (🟬..🟯) <reserved-1F7EC>..<reserved-1F7EF>
@ -1282,37 +1266,30 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c
1FA00..1FA6F ; Extended_Pictographic# E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING..<reserved-1FA6F>
1FA70..1FA73 ; Extended_Pictographic# E12.0 [4] (🩰..🩳) ballet shoes..shorts
1FA74 ; Extended_Pictographic# E13.0 [1] (🩴) thong sandal
1FA75..1FA77 ; Extended_Pictographic# E15.0 [3] (🩵..🩷) light blue heart..pink heart
1FA75..1FA77 ; Extended_Pictographic# E0.0 [3] (🩵..🩷) <reserved-1FA75>..<reserved-1FA77>
1FA78..1FA7A ; Extended_Pictographic# E12.0 [3] (🩸..🩺) drop of blood..stethoscope
1FA7B..1FA7C ; Extended_Pictographic# E14.0 [2] (🩻..🩼) x-ray..crutch
1FA7D..1FA7F ; Extended_Pictographic# E0.0 [3] (🩽..🩿) <reserved-1FA7D>..<reserved-1FA7F>
1FA80..1FA82 ; Extended_Pictographic# E12.0 [3] (🪀..🪂) yo-yo..parachute
1FA83..1FA86 ; Extended_Pictographic# E13.0 [4] (🪃..🪆) boomerang..nesting dolls
1FA87..1FA88 ; Extended_Pictographic# E15.0 [2] (🪇..🪈) maracas..flute
1FA89..1FA8F ; Extended_Pictographic# E0.0 [7] (🪉..🪏) <reserved-1FA89>..<reserved-1FA8F>
1FA87..1FA8F ; Extended_Pictographic# E0.0 [9] (🪇..🪏) <reserved-1FA87>..<reserved-1FA8F>
1FA90..1FA95 ; Extended_Pictographic# E12.0 [6] (🪐..🪕) ringed planet..banjo
1FA96..1FAA8 ; Extended_Pictographic# E13.0 [19] (🪖..🪨) military helmet..rock
1FAA9..1FAAC ; Extended_Pictographic# E14.0 [4] (🪩..🪬) mirror ball..hamsa
1FAAD..1FAAF ; Extended_Pictographic# E15.0 [3] (🪭..🪯) folding hand fan..khanda
1FAAD..1FAAF ; Extended_Pictographic# E0.0 [3] (🪭..🪯) <reserved-1FAAD>..<reserved-1FAAF>
1FAB0..1FAB6 ; Extended_Pictographic# E13.0 [7] (🪰..🪶) fly..feather
1FAB7..1FABA ; Extended_Pictographic# E14.0 [4] (🪷..🪺) lotus..nest with eggs
1FABB..1FABD ; Extended_Pictographic# E15.0 [3] (🪻..🪽) hyacinth..wing
1FABE ; Extended_Pictographic# E0.0 [1] (🪾) <reserved-1FABE>
1FABF ; Extended_Pictographic# E15.0 [1] (🪿) goose
1FABB..1FABF ; Extended_Pictographic# E0.0 [5] (🪻..🪿) <reserved-1FABB>..<reserved-1FABF>
1FAC0..1FAC2 ; Extended_Pictographic# E13.0 [3] (🫀..🫂) anatomical heart..people hugging
1FAC3..1FAC5 ; Extended_Pictographic# E14.0 [3] (🫃..🫅) pregnant man..person with crown
1FAC6..1FACD ; Extended_Pictographic# E0.0 [8] (🫆..🫍) <reserved-1FAC6>..<reserved-1FACD>
1FACE..1FACF ; Extended_Pictographic# E15.0 [2] (🫎..🫏) moose..donkey
1FAC6..1FACF ; Extended_Pictographic# E0.0 [10] (🫆..🫏) <reserved-1FAC6>..<reserved-1FACF>
1FAD0..1FAD6 ; Extended_Pictographic# E13.0 [7] (🫐..🫖) blueberries..teapot
1FAD7..1FAD9 ; Extended_Pictographic# E14.0 [3] (🫗..🫙) pouring liquid..jar
1FADA..1FADB ; Extended_Pictographic# E15.0 [2] (🫚..🫛) ginger root..pea pod
1FADC..1FADF ; Extended_Pictographic# E0.0 [4] (🫜..🫟) <reserved-1FADC>..<reserved-1FADF>
1FADA..1FADF ; Extended_Pictographic# E0.0 [6] (🫚..🫟) <reserved-1FADA>..<reserved-1FADF>
1FAE0..1FAE7 ; Extended_Pictographic# E14.0 [8] (🫠..🫧) melting face..bubbles
1FAE8 ; Extended_Pictographic# E15.0 [1] (🫨) shaking face
1FAE9..1FAEF ; Extended_Pictographic# E0.0 [7] (🫩..🫯) <reserved-1FAE9>..<reserved-1FAEF>
1FAE8..1FAEF ; Extended_Pictographic# E0.0 [8] (🫨..🫯) <reserved-1FAE8>..<reserved-1FAEF>
1FAF0..1FAF6 ; Extended_Pictographic# E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands
1FAF7..1FAF8 ; Extended_Pictographic# E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand
1FAF9..1FAFF ; Extended_Pictographic# E0.0 [7] (🫹..🫿) <reserved-1FAF9>..<reserved-1FAFF>
1FAF7..1FAFF ; Extended_Pictographic# E0.0 [9] (🫷..🫿) <reserved-1FAF7>..<reserved-1FAFF>
1FC00..1FFFD ; Extended_Pictographic# E0.0[1022] (🰀..🿽) <reserved-1FC00>..<reserved-1FFFD>
# Total elements: 3537

View file

@ -1,13 +1,13 @@
# emoji-sequences.txt
# Date: 2022-08-15, 23:13:41 GMT
# © 2022 Unicode®, Inc.
# Date: 2021-08-26, 17:22:22 GMT
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Emoji Sequence Data for UTS #51
# Version: 15.0
# Version: 14.0
#
# For documentation and usage, see https://www.unicode.org/reports/tr51
# For documentation and usage, see http://www.unicode.org/reports/tr51
#
# Format:
# code_point(s) ; type_field ; description # comments
@ -38,145 +38,144 @@
# Basic_Emoji
231A..231B ; Basic_Emoji ; watch..hourglass done # E0.6 [2] (⌚..⌛)
23E9..23EC ; Basic_Emoji ; fast-forward button..fast down button # E0.6 [4] (⏩..⏬)
231A..231B ; Basic_Emoji ; watch # E0.6 [2] (⌚..⌛)
23E9..23EC ; Basic_Emoji ; fast-forward button # E0.6 [4] (⏩..⏬)
23F0 ; Basic_Emoji ; alarm clock # E0.6 [1] (⏰)
23F3 ; Basic_Emoji ; hourglass not done # E0.6 [1] (⏳)
25FD..25FE ; Basic_Emoji ; white medium-small square..black medium-small square # E0.6 [2] (◽..◾)
2614..2615 ; Basic_Emoji ; umbrella with rain drops..hot beverage # E0.6 [2] (☔..☕)
2648..2653 ; Basic_Emoji ; Aries..Pisces # E0.6 [12] (♈..♓)
25FD..25FE ; Basic_Emoji ; white medium-small square # E0.6 [2] (◽..◾)
2614..2615 ; Basic_Emoji ; umbrella with rain drops # E0.6 [2] (☔..☕)
2648..2653 ; Basic_Emoji ; Aries # E0.6 [12] (♈..♓)
267F ; Basic_Emoji ; wheelchair symbol # E0.6 [1] (♿)
2693 ; Basic_Emoji ; anchor # E0.6 [1] (⚓)
26A1 ; Basic_Emoji ; high voltage # E0.6 [1] (⚡)
26AA..26AB ; Basic_Emoji ; white circle..black circle # E0.6 [2] (⚪..⚫)
26BD..26BE ; Basic_Emoji ; soccer ball..baseball # E0.6 [2] (⚽..⚾)
26C4..26C5 ; Basic_Emoji ; snowman without snow..sun behind cloud # E0.6 [2] (⛄..⛅)
26AA..26AB ; Basic_Emoji ; white circle # E0.6 [2] (⚪..⚫)
26BD..26BE ; Basic_Emoji ; soccer ball # E0.6 [2] (⚽..⚾)
26C4..26C5 ; Basic_Emoji ; snowman without snow # E0.6 [2] (⛄..⛅)
26CE ; Basic_Emoji ; Ophiuchus # E0.6 [1] (⛎)
26D4 ; Basic_Emoji ; no entry # E0.6 [1] (⛔)
26EA ; Basic_Emoji ; church # E0.6 [1] (⛪)
26F2..26F3 ; Basic_Emoji ; fountain..flag in hole # E0.6 [2] (⛲..⛳)
26F2..26F3 ; Basic_Emoji ; fountain # E0.6 [2] (⛲..⛳)
26F5 ; Basic_Emoji ; sailboat # E0.6 [1] (⛵)
26FA ; Basic_Emoji ; tent # E0.6 [1] (⛺)
26FD ; Basic_Emoji ; fuel pump # E0.6 [1] (⛽)
2705 ; Basic_Emoji ; check mark button # E0.6 [1] (✅)
270A..270B ; Basic_Emoji ; raised fist..raised hand # E0.6 [2] (✊..✋)
270A..270B ; Basic_Emoji ; raised fist # E0.6 [2] (✊..✋)
2728 ; Basic_Emoji ; sparkles # E0.6 [1] (✨)
274C ; Basic_Emoji ; cross mark # E0.6 [1] (❌)
274E ; Basic_Emoji ; cross mark button # E0.6 [1] (❎)
2753..2755 ; Basic_Emoji ; red question mark..white exclamation mark # E0.6 [3] (❓..❕)
2753..2755 ; Basic_Emoji ; red question mark # E0.6 [3] (❓..❕)
2757 ; Basic_Emoji ; red exclamation mark # E0.6 [1] (❗)
2795..2797 ; Basic_Emoji ; plus..divide # E0.6 [3] (..➗)
2795..2797 ; Basic_Emoji ; plus # E0.6 [3] (..➗)
27B0 ; Basic_Emoji ; curly loop # E0.6 [1] (➰)
27BF ; Basic_Emoji ; double curly loop # E1.0 [1] (➿)
2B1B..2B1C ; Basic_Emoji ; black large square..white large square # E0.6 [2] (⬛..⬜)
2B1B..2B1C ; Basic_Emoji ; black large square # E0.6 [2] (⬛..⬜)
2B50 ; Basic_Emoji ; star # E0.6 [1] (⭐)
2B55 ; Basic_Emoji ; hollow red circle # E0.6 [1] (⭕)
1F004 ; Basic_Emoji ; mahjong red dragon # E0.6 [1] (🀄)
1F0CF ; Basic_Emoji ; joker # E0.6 [1] (🃏)
1F18E ; Basic_Emoji ; AB button (blood type) # E0.6 [1] (🆎)
1F191..1F19A ; Basic_Emoji ; CL button..VS button # E0.6 [10] (🆑..🆚)
1F191..1F19A ; Basic_Emoji ; CL button # E0.6 [10] (🆑..🆚)
1F201 ; Basic_Emoji ; Japanese “here” button # E0.6 [1] (🈁)
1F21A ; Basic_Emoji ; Japanese “free of charge” button # E0.6 [1] (🈚)
1F22F ; Basic_Emoji ; Japanese “reserved” button # E0.6 [1] (🈯)
1F232..1F236 ; Basic_Emoji ; Japanese “prohibited” button..Japanese “not free of charge” button#E0.6 [5] (🈲..🈶)
1F238..1F23A ; Basic_Emoji ; Japanese “application” button..Japanese “open for business” button#E0.6 [3] (🈸..🈺)
1F250..1F251 ; Basic_Emoji ; Japanese “bargain” button..Japanese “acceptable” button # E0.6 [2] (🉐..🉑)
1F300..1F30C ; Basic_Emoji ; cyclone..milky way # E0.6 [13] (🌀..🌌)
1F30D..1F30E ; Basic_Emoji ; globe showing Europe-Africa..globe showing Americas # E0.7 [2] (🌍..🌎)
1F232..1F236 ; Basic_Emoji ; Japanese “prohibited” button # E0.6 [5] (🈲..🈶)
1F238..1F23A ; Basic_Emoji ; Japanese “application” button # E0.6 [3] (🈸..🈺)
1F250..1F251 ; Basic_Emoji ; Japanese “bargain” button # E0.6 [2] (🉐..🉑)
1F300..1F30C ; Basic_Emoji ; cyclone # E0.6 [13] (🌀..🌌)
1F30D..1F30E ; Basic_Emoji ; globe showing Europe-Africa # E0.7 [2] (🌍..🌎)
1F30F ; Basic_Emoji ; globe showing Asia-Australia # E0.6 [1] (🌏)
1F310 ; Basic_Emoji ; globe with meridians # E1.0 [1] (🌐)
1F311 ; Basic_Emoji ; new moon # E0.6 [1] (🌑)
1F312 ; Basic_Emoji ; waxing crescent moon # E1.0 [1] (🌒)
1F313..1F315 ; Basic_Emoji ; first quarter moon..full moon # E0.6 [3] (🌓..🌕)
1F316..1F318 ; Basic_Emoji ; waning gibbous moon..waning crescent moon # E1.0 [3] (🌖..🌘)
1F313..1F315 ; Basic_Emoji ; first quarter moon # E0.6 [3] (🌓..🌕)
1F316..1F318 ; Basic_Emoji ; waning gibbous moon # E1.0 [3] (🌖..🌘)
1F319 ; Basic_Emoji ; crescent moon # E0.6 [1] (🌙)
1F31A ; Basic_Emoji ; new moon face # E1.0 [1] (🌚)
1F31B ; Basic_Emoji ; first quarter moon face # E0.6 [1] (🌛)
1F31C ; Basic_Emoji ; last quarter moon face # E0.7 [1] (🌜)
1F31D..1F31E ; Basic_Emoji ; full moon face..sun with face # E1.0 [2] (🌝..🌞)
1F31F..1F320 ; Basic_Emoji ; glowing star..shooting star # E0.6 [2] (🌟..🌠)
1F32D..1F32F ; Basic_Emoji ; hot dog..burrito # E1.0 [3] (🌭..🌯)
1F330..1F331 ; Basic_Emoji ; chestnut..seedling # E0.6 [2] (🌰..🌱)
1F332..1F333 ; Basic_Emoji ; evergreen tree..deciduous tree # E1.0 [2] (🌲..🌳)
1F334..1F335 ; Basic_Emoji ; palm tree..cactus # E0.6 [2] (🌴..🌵)
1F337..1F34A ; Basic_Emoji ; tulip..tangerine # E0.6 [20] (🌷..🍊)
1F31D..1F31E ; Basic_Emoji ; full moon face # E1.0 [2] (🌝..🌞)
1F31F..1F320 ; Basic_Emoji ; glowing star # E0.6 [2] (🌟..🌠)
1F32D..1F32F ; Basic_Emoji ; hot dog # E1.0 [3] (🌭..🌯)
1F330..1F331 ; Basic_Emoji ; chestnut # E0.6 [2] (🌰..🌱)
1F332..1F333 ; Basic_Emoji ; evergreen tree # E1.0 [2] (🌲..🌳)
1F334..1F335 ; Basic_Emoji ; palm tree # E0.6 [2] (🌴..🌵)
1F337..1F34A ; Basic_Emoji ; tulip # E0.6 [20] (🌷..🍊)
1F34B ; Basic_Emoji ; lemon # E1.0 [1] (🍋)
1F34C..1F34F ; Basic_Emoji ; banana..green apple # E0.6 [4] (🍌..🍏)
1F34C..1F34F ; Basic_Emoji ; banana # E0.6 [4] (🍌..🍏)
1F350 ; Basic_Emoji ; pear # E1.0 [1] (🍐)
1F351..1F37B ; Basic_Emoji ; peach..clinking beer mugs # E0.6 [43] (🍑..🍻)
1F351..1F37B ; Basic_Emoji ; peach # E0.6 [43] (🍑..🍻)
1F37C ; Basic_Emoji ; baby bottle # E1.0 [1] (🍼)
1F37E..1F37F ; Basic_Emoji ; bottle with popping cork..popcorn # E1.0 [2] (🍾..🍿)
1F380..1F393 ; Basic_Emoji ; ribbon..graduation cap # E0.6 [20] (🎀..🎓)
1F3A0..1F3C4 ; Basic_Emoji ; carousel horse..person surfing # E0.6 [37] (🎠..🏄)
1F37E..1F37F ; Basic_Emoji ; bottle with popping cork # E1.0 [2] (🍾..🍿)
1F380..1F393 ; Basic_Emoji ; ribbon # E0.6 [20] (🎀..🎓)
1F3A0..1F3C4 ; Basic_Emoji ; carousel horse # E0.6 [37] (🎠..🏄)
1F3C5 ; Basic_Emoji ; sports medal # E1.0 [1] (🏅)
1F3C6 ; Basic_Emoji ; trophy # E0.6 [1] (🏆)
1F3C7 ; Basic_Emoji ; horse racing # E1.0 [1] (🏇)
1F3C8 ; Basic_Emoji ; american football # E0.6 [1] (🏈)
1F3C9 ; Basic_Emoji ; rugby football # E1.0 [1] (🏉)
1F3CA ; Basic_Emoji ; person swimming # E0.6 [1] (🏊)
1F3CF..1F3D3 ; Basic_Emoji ; cricket game..ping pong # E1.0 [5] (🏏..🏓)
1F3E0..1F3E3 ; Basic_Emoji ; house..Japanese post office # E0.6 [4] (🏠..🏣)
1F3CF..1F3D3 ; Basic_Emoji ; cricket game # E1.0 [5] (🏏..🏓)
1F3E0..1F3E3 ; Basic_Emoji ; house # E0.6 [4] (🏠..🏣)
1F3E4 ; Basic_Emoji ; post office # E1.0 [1] (🏤)
1F3E5..1F3F0 ; Basic_Emoji ; hospital..castle # E0.6 [12] (🏥..🏰)
1F3E5..1F3F0 ; Basic_Emoji ; hospital # E0.6 [12] (🏥..🏰)
1F3F4 ; Basic_Emoji ; black flag # E1.0 [1] (🏴)
1F3F8..1F407 ; Basic_Emoji ; badminton..rabbit # E1.0 [16] (🏸..🐇)
1F3F8..1F407 ; Basic_Emoji ; badminton # E1.0 [16] (🏸..🐇)
1F408 ; Basic_Emoji ; cat # E0.7 [1] (🐈)
1F409..1F40B ; Basic_Emoji ; dragon..whale # E1.0 [3] (🐉..🐋)
1F40C..1F40E ; Basic_Emoji ; snail..horse # E0.6 [3] (🐌..🐎)
1F40F..1F410 ; Basic_Emoji ; ram..goat # E1.0 [2] (🐏..🐐)
1F411..1F412 ; Basic_Emoji ; ewe..monkey # E0.6 [2] (🐑..🐒)
1F409..1F40B ; Basic_Emoji ; dragon # E1.0 [3] (🐉..🐋)
1F40C..1F40E ; Basic_Emoji ; snail # E0.6 [3] (🐌..🐎)
1F40F..1F410 ; Basic_Emoji ; ram # E1.0 [2] (🐏..🐐)
1F411..1F412 ; Basic_Emoji ; ewe # E0.6 [2] (🐑..🐒)
1F413 ; Basic_Emoji ; rooster # E1.0 [1] (🐓)
1F414 ; Basic_Emoji ; chicken # E0.6 [1] (🐔)
1F415 ; Basic_Emoji ; dog # E0.7 [1] (🐕)
1F416 ; Basic_Emoji ; pig # E1.0 [1] (🐖)
1F417..1F429 ; Basic_Emoji ; boar..poodle # E0.6 [19] (🐗..🐩)
1F417..1F429 ; Basic_Emoji ; boar # E0.6 [19] (🐗..🐩)
1F42A ; Basic_Emoji ; camel # E1.0 [1] (🐪)
1F42B..1F43E ; Basic_Emoji ; two-hump camel..paw prints # E0.6 [20] (🐫..🐾)
1F42B..1F43E ; Basic_Emoji ; two-hump camel # E0.6 [20] (🐫..🐾)
1F440 ; Basic_Emoji ; eyes # E0.6 [1] (👀)
1F442..1F464 ; Basic_Emoji ; ear..bust in silhouette # E0.6 [35] (👂..👤)
1F442..1F464 ; Basic_Emoji ; ear # E0.6 [35] (👂..👤)
1F465 ; Basic_Emoji ; busts in silhouette # E1.0 [1] (👥)
1F466..1F46B ; Basic_Emoji ; boy..woman and man holding hands # E0.6 [6] (👦..👫)
1F46C..1F46D ; Basic_Emoji ; men holding hands..women holding hands # E1.0 [2] (👬..👭)
1F46E..1F4AC ; Basic_Emoji ; police officer..speech balloon # E0.6 [63] (👮..💬)
1F466..1F46B ; Basic_Emoji ; boy # E0.6 [6] (👦..👫)
1F46C..1F46D ; Basic_Emoji ; men holding hands # E1.0 [2] (👬..👭)
1F46E..1F4AC ; Basic_Emoji ; police officer # E0.6 [63] (👮..💬)
1F4AD ; Basic_Emoji ; thought balloon # E1.0 [1] (💭)
1F4AE..1F4B5 ; Basic_Emoji ; white flower..dollar banknote # E0.6 [8] (💮..💵)
1F4B6..1F4B7 ; Basic_Emoji ; euro banknote..pound banknote # E1.0 [2] (💶..💷)
1F4B8..1F4EB ; Basic_Emoji ; money with wings..closed mailbox with raised flag # E0.6 [52] (💸..📫)
1F4EC..1F4ED ; Basic_Emoji ; open mailbox with raised flag..open mailbox with lowered flag # E0.7 [2] (📬..📭)
1F4AE..1F4B5 ; Basic_Emoji ; white flower # E0.6 [8] (💮..💵)
1F4B6..1F4B7 ; Basic_Emoji ; euro banknote # E1.0 [2] (💶..💷)
1F4B8..1F4EB ; Basic_Emoji ; money with wings # E0.6 [52] (💸..📫)
1F4EC..1F4ED ; Basic_Emoji ; open mailbox with raised flag # E0.7 [2] (📬..📭)
1F4EE ; Basic_Emoji ; postbox # E0.6 [1] (📮)
1F4EF ; Basic_Emoji ; postal horn # E1.0 [1] (📯)
1F4F0..1F4F4 ; Basic_Emoji ; newspaper..mobile phone off # E0.6 [5] (📰..📴)
1F4F0..1F4F4 ; Basic_Emoji ; newspaper # E0.6 [5] (📰..📴)
1F4F5 ; Basic_Emoji ; no mobile phones # E1.0 [1] (📵)
1F4F6..1F4F7 ; Basic_Emoji ; antenna bars..camera # E0.6 [2] (📶..📷)
1F4F6..1F4F7 ; Basic_Emoji ; antenna bars # E0.6 [2] (📶..📷)
1F4F8 ; Basic_Emoji ; camera with flash # E1.0 [1] (📸)
1F4F9..1F4FC ; Basic_Emoji ; video camera..videocassette # E0.6 [4] (📹..📼)
1F4FF..1F502 ; Basic_Emoji ; prayer beads..repeat single button # E1.0 [4] (📿..🔂)
1F4F9..1F4FC ; Basic_Emoji ; video camera # E0.6 [4] (📹..📼)
1F4FF..1F502 ; Basic_Emoji ; prayer beads # E1.0 [4] (📿..🔂)
1F503 ; Basic_Emoji ; clockwise vertical arrows # E0.6 [1] (🔃)
1F504..1F507 ; Basic_Emoji ; counterclockwise arrows button..muted speaker # E1.0 [4] (🔄..🔇)
1F504..1F507 ; Basic_Emoji ; counterclockwise arrows button # E1.0 [4] (🔄..🔇)
1F508 ; Basic_Emoji ; speaker low volume # E0.7 [1] (🔈)
1F509 ; Basic_Emoji ; speaker medium volume # E1.0 [1] (🔉)
1F50A..1F514 ; Basic_Emoji ; speaker high volume..bell # E0.6 [11] (🔊..🔔)
1F50A..1F514 ; Basic_Emoji ; speaker high volume # E0.6 [11] (🔊..🔔)
1F515 ; Basic_Emoji ; bell with slash # E1.0 [1] (🔕)
1F516..1F52B ; Basic_Emoji ; bookmark..water pistol # E0.6 [22] (🔖..🔫)
1F52C..1F52D ; Basic_Emoji ; microscope..telescope # E1.0 [2] (🔬..🔭)
1F52E..1F53D ; Basic_Emoji ; crystal ball..downwards button # E0.6 [16] (🔮..🔽)
1F54B..1F54E ; Basic_Emoji ; kaaba..menorah # E1.0 [4] (🕋..🕎)
1F550..1F55B ; Basic_Emoji ; one oclock..twelve oclock # E0.6 [12] (🕐..🕛)
1F55C..1F567 ; Basic_Emoji ; one-thirty..twelve-thirty # E0.7 [12] (🕜..🕧)
1F516..1F52B ; Basic_Emoji ; bookmark # E0.6 [22] (🔖..🔫)
1F52C..1F52D ; Basic_Emoji ; microscope # E1.0 [2] (🔬..🔭)
1F52E..1F53D ; Basic_Emoji ; crystal ball # E0.6 [16] (🔮..🔽)
1F54B..1F54E ; Basic_Emoji ; kaaba # E1.0 [4] (🕋..🕎)
1F550..1F55B ; Basic_Emoji ; one oclock # E0.6 [12] (🕐..🕛)
1F55C..1F567 ; Basic_Emoji ; one-thirty # E0.7 [12] (🕜..🕧)
1F57A ; Basic_Emoji ; man dancing # E3.0 [1] (🕺)
1F595..1F596 ; Basic_Emoji ; middle finger..vulcan salute # E1.0 [2] (🖕..🖖)
1F595..1F596 ; Basic_Emoji ; middle finger # E1.0 [2] (🖕..🖖)
1F5A4 ; Basic_Emoji ; black heart # E3.0 [1] (🖤)
1F5FB..1F5FF ; Basic_Emoji ; mount fuji..moai # E0.6 [5] (🗻..🗿)
1F5FB..1F5FF ; Basic_Emoji ; mount fuji # E0.6 [5] (🗻..🗿)
1F600 ; Basic_Emoji ; grinning face # E1.0 [1] (😀)
1F601..1F606 ; Basic_Emoji ; beaming face with smiling eyes..grinning squinting face # E0.6 [6] (😁..😆)
1F607..1F608 ; Basic_Emoji ; smiling face with halo..smiling face with horns # E1.0 [2] (😇..😈)
1F609..1F60D ; Basic_Emoji ; winking face..smiling face with heart-eyes # E0.6 [5] (😉..😍)
1F601..1F606 ; Basic_Emoji ; beaming face with smiling eyes # E0.6 [6] (😁..😆)
1F607..1F608 ; Basic_Emoji ; smiling face with halo # E1.0 [2] (😇..😈)
1F609..1F60D ; Basic_Emoji ; winking face # E0.6 [5] (😉..😍)
1F60E ; Basic_Emoji ; smiling face with sunglasses # E1.0 [1] (😎)
1F60F ; Basic_Emoji ; smirking face # E0.6 [1] (😏)
1F610 ; Basic_Emoji ; neutral face # E0.7 [1] (😐)
1F611 ; Basic_Emoji ; expressionless face # E1.0 [1] (😑)
1F612..1F614 ; Basic_Emoji ; unamused face..pensive face # E0.6 [3] (😒..😔)
1F612..1F614 ; Basic_Emoji ; unamused face # E0.6 [3] (😒..😔)
1F615 ; Basic_Emoji ; confused face # E1.0 [1] (😕)
1F616 ; Basic_Emoji ; confounded face # E0.6 [1] (😖)
1F617 ; Basic_Emoji ; kissing face # E1.0 [1] (😗)
@ -184,142 +183,132 @@
1F619 ; Basic_Emoji ; kissing face with smiling eyes # E1.0 [1] (😙)
1F61A ; Basic_Emoji ; kissing face with closed eyes # E0.6 [1] (😚)
1F61B ; Basic_Emoji ; face with tongue # E1.0 [1] (😛)
1F61C..1F61E ; Basic_Emoji ; winking face with tongue..disappointed face # E0.6 [3] (😜..😞)
1F61C..1F61E ; Basic_Emoji ; winking face with tongue # E0.6 [3] (😜..😞)
1F61F ; Basic_Emoji ; worried face # E1.0 [1] (😟)
1F620..1F625 ; Basic_Emoji ; angry face..sad but relieved face # E0.6 [6] (😠..😥)
1F626..1F627 ; Basic_Emoji ; frowning face with open mouth..anguished face # E1.0 [2] (😦..😧)
1F628..1F62B ; Basic_Emoji ; fearful face..tired face # E0.6 [4] (😨..😫)
1F620..1F625 ; Basic_Emoji ; angry face # E0.6 [6] (😠..😥)
1F626..1F627 ; Basic_Emoji ; frowning face with open mouth # E1.0 [2] (😦..😧)
1F628..1F62B ; Basic_Emoji ; fearful face # E0.6 [4] (😨..😫)
1F62C ; Basic_Emoji ; grimacing face # E1.0 [1] (😬)
1F62D ; Basic_Emoji ; loudly crying face # E0.6 [1] (😭)
1F62E..1F62F ; Basic_Emoji ; face with open mouth..hushed face # E1.0 [2] (😮..😯)
1F630..1F633 ; Basic_Emoji ; anxious face with sweat..flushed face # E0.6 [4] (😰..😳)
1F62E..1F62F ; Basic_Emoji ; face with open mouth # E1.0 [2] (😮..😯)
1F630..1F633 ; Basic_Emoji ; anxious face with sweat # E0.6 [4] (😰..😳)
1F634 ; Basic_Emoji ; sleeping face # E1.0 [1] (😴)
1F635 ; Basic_Emoji ; face with crossed-out eyes # E0.6 [1] (😵)
1F636 ; Basic_Emoji ; face without mouth # E1.0 [1] (😶)
1F637..1F640 ; Basic_Emoji ; face with medical mask..weary cat # E0.6 [10] (😷..🙀)
1F641..1F644 ; Basic_Emoji ; slightly frowning face..face with rolling eyes # E1.0 [4] (🙁..🙄)
1F645..1F64F ; Basic_Emoji ; person gesturing NO..folded hands # E0.6 [11] (🙅..🙏)
1F637..1F640 ; Basic_Emoji ; face with medical mask # E0.6 [10] (😷..🙀)
1F641..1F644 ; Basic_Emoji ; slightly frowning face # E1.0 [4] (🙁..🙄)
1F645..1F64F ; Basic_Emoji ; person gesturing NO # E0.6 [11] (🙅..🙏)
1F680 ; Basic_Emoji ; rocket # E0.6 [1] (🚀)
1F681..1F682 ; Basic_Emoji ; helicopter..locomotive # E1.0 [2] (🚁..🚂)
1F683..1F685 ; Basic_Emoji ; railway car..bullet train # E0.6 [3] (🚃..🚅)
1F681..1F682 ; Basic_Emoji ; helicopter # E1.0 [2] (🚁..🚂)
1F683..1F685 ; Basic_Emoji ; railway car # E0.6 [3] (🚃..🚅)
1F686 ; Basic_Emoji ; train # E1.0 [1] (🚆)
1F687 ; Basic_Emoji ; metro # E0.6 [1] (🚇)
1F688 ; Basic_Emoji ; light rail # E1.0 [1] (🚈)
1F689 ; Basic_Emoji ; station # E0.6 [1] (🚉)
1F68A..1F68B ; Basic_Emoji ; tram..tram car # E1.0 [2] (🚊..🚋)
1F68A..1F68B ; Basic_Emoji ; tram # E1.0 [2] (🚊..🚋)
1F68C ; Basic_Emoji ; bus # E0.6 [1] (🚌)
1F68D ; Basic_Emoji ; oncoming bus # E0.7 [1] (🚍)
1F68E ; Basic_Emoji ; trolleybus # E1.0 [1] (🚎)
1F68F ; Basic_Emoji ; bus stop # E0.6 [1] (🚏)
1F690 ; Basic_Emoji ; minibus # E1.0 [1] (🚐)
1F691..1F693 ; Basic_Emoji ; ambulance..police car # E0.6 [3] (🚑..🚓)
1F691..1F693 ; Basic_Emoji ; ambulance # E0.6 [3] (🚑..🚓)
1F694 ; Basic_Emoji ; oncoming police car # E0.7 [1] (🚔)
1F695 ; Basic_Emoji ; taxi # E0.6 [1] (🚕)
1F696 ; Basic_Emoji ; oncoming taxi # E1.0 [1] (🚖)
1F697 ; Basic_Emoji ; automobile # E0.6 [1] (🚗)
1F698 ; Basic_Emoji ; oncoming automobile # E0.7 [1] (🚘)
1F699..1F69A ; Basic_Emoji ; sport utility vehicle..delivery truck # E0.6 [2] (🚙..🚚)
1F69B..1F6A1 ; Basic_Emoji ; articulated lorry..aerial tramway # E1.0 [7] (🚛..🚡)
1F699..1F69A ; Basic_Emoji ; sport utility vehicle # E0.6 [2] (🚙..🚚)
1F69B..1F6A1 ; Basic_Emoji ; articulated lorry # E1.0 [7] (🚛..🚡)
1F6A2 ; Basic_Emoji ; ship # E0.6 [1] (🚢)
1F6A3 ; Basic_Emoji ; person rowing boat # E1.0 [1] (🚣)
1F6A4..1F6A5 ; Basic_Emoji ; speedboat..horizontal traffic light # E0.6 [2] (🚤..🚥)
1F6A4..1F6A5 ; Basic_Emoji ; speedboat # E0.6 [2] (🚤..🚥)
1F6A6 ; Basic_Emoji ; vertical traffic light # E1.0 [1] (🚦)
1F6A7..1F6AD ; Basic_Emoji ; construction..no smoking # E0.6 [7] (🚧..🚭)
1F6AE..1F6B1 ; Basic_Emoji ; litter in bin sign..non-potable water # E1.0 [4] (🚮..🚱)
1F6A7..1F6AD ; Basic_Emoji ; construction # E0.6 [7] (🚧..🚭)
1F6AE..1F6B1 ; Basic_Emoji ; litter in bin sign # E1.0 [4] (🚮..🚱)
1F6B2 ; Basic_Emoji ; bicycle # E0.6 [1] (🚲)
1F6B3..1F6B5 ; Basic_Emoji ; no bicycles..person mountain biking # E1.0 [3] (🚳..🚵)
1F6B3..1F6B5 ; Basic_Emoji ; no bicycles # E1.0 [3] (🚳..🚵)
1F6B6 ; Basic_Emoji ; person walking # E0.6 [1] (🚶)
1F6B7..1F6B8 ; Basic_Emoji ; no pedestrians..children crossing # E1.0 [2] (🚷..🚸)
1F6B9..1F6BE ; Basic_Emoji ; mens room..water closet # E0.6 [6] (🚹..🚾)
1F6B7..1F6B8 ; Basic_Emoji ; no pedestrians # E1.0 [2] (🚷..🚸)
1F6B9..1F6BE ; Basic_Emoji ; mens room # E0.6 [6] (🚹..🚾)
1F6BF ; Basic_Emoji ; shower # E1.0 [1] (🚿)
1F6C0 ; Basic_Emoji ; person taking bath # E0.6 [1] (🛀)
1F6C1..1F6C5 ; Basic_Emoji ; bathtub..left luggage # E1.0 [5] (🛁..🛅)
1F6C1..1F6C5 ; Basic_Emoji ; bathtub # E1.0 [5] (🛁..🛅)
1F6CC ; Basic_Emoji ; person in bed # E1.0 [1] (🛌)
1F6D0 ; Basic_Emoji ; place of worship # E1.0 [1] (🛐)
1F6D1..1F6D2 ; Basic_Emoji ; stop sign..shopping cart # E3.0 [2] (🛑..🛒)
1F6D1..1F6D2 ; Basic_Emoji ; stop sign # E3.0 [2] (🛑..🛒)
1F6D5 ; Basic_Emoji ; hindu temple # E12.0 [1] (🛕)
1F6D6..1F6D7 ; Basic_Emoji ; hut..elevator # E13.0 [2] (🛖..🛗)
1F6DC ; Basic_Emoji ; wireless # E15.0 [1] (🛜)
1F6DD..1F6DF ; Basic_Emoji ; playground slide..ring buoy # E14.0 [3] (🛝..🛟)
1F6EB..1F6EC ; Basic_Emoji ; airplane departure..airplane arrival # E1.0 [2] (🛫..🛬)
1F6F4..1F6F6 ; Basic_Emoji ; kick scooter..canoe # E3.0 [3] (🛴..🛶)
1F6F7..1F6F8 ; Basic_Emoji ; sled..flying saucer # E5.0 [2] (🛷..🛸)
1F6D6..1F6D7 ; Basic_Emoji ; hut # E13.0 [2] (🛖..🛗)
1F6DD..1F6DF ; Basic_Emoji ; playground slide # E14.0 [3] (🛝..🛟)
1F6EB..1F6EC ; Basic_Emoji ; airplane departure # E1.0 [2] (🛫..🛬)
1F6F4..1F6F6 ; Basic_Emoji ; kick scooter # E3.0 [3] (🛴..🛶)
1F6F7..1F6F8 ; Basic_Emoji ; sled # E5.0 [2] (🛷..🛸)
1F6F9 ; Basic_Emoji ; skateboard # E11.0 [1] (🛹)
1F6FA ; Basic_Emoji ; auto rickshaw # E12.0 [1] (🛺)
1F6FB..1F6FC ; Basic_Emoji ; pickup truck..roller skate # E13.0 [2] (🛻..🛼)
1F7E0..1F7EB ; Basic_Emoji ; orange circle..brown square # E12.0 [12] (🟠..🟫)
1F6FB..1F6FC ; Basic_Emoji ; pickup truck # E13.0 [2] (🛻..🛼)
1F7E0..1F7EB ; Basic_Emoji ; orange circle # E12.0 [12] (🟠..🟫)
1F7F0 ; Basic_Emoji ; heavy equals sign # E14.0 [1] (🟰)
1F90C ; Basic_Emoji ; pinched fingers # E13.0 [1] (🤌)
1F90D..1F90F ; Basic_Emoji ; white heart..pinching hand # E12.0 [3] (🤍..🤏)
1F910..1F918 ; Basic_Emoji ; zipper-mouth face..sign of the horns # E1.0 [9] (🤐..🤘)
1F919..1F91E ; Basic_Emoji ; call me hand..crossed fingers # E3.0 [6] (🤙..🤞)
1F90D..1F90F ; Basic_Emoji ; white heart # E12.0 [3] (🤍..🤏)
1F910..1F918 ; Basic_Emoji ; zipper-mouth face # E1.0 [9] (🤐..🤘)
1F919..1F91E ; Basic_Emoji ; call me hand # E3.0 [6] (🤙..🤞)
1F91F ; Basic_Emoji ; love-you gesture # E5.0 [1] (🤟)
1F920..1F927 ; Basic_Emoji ; cowboy hat face..sneezing face # E3.0 [8] (🤠..🤧)
1F928..1F92F ; Basic_Emoji ; face with raised eyebrow..exploding head # E5.0 [8] (🤨..🤯)
1F920..1F927 ; Basic_Emoji ; cowboy hat face # E3.0 [8] (🤠..🤧)
1F928..1F92F ; Basic_Emoji ; face with raised eyebrow # E5.0 [8] (🤨..🤯)
1F930 ; Basic_Emoji ; pregnant woman # E3.0 [1] (🤰)
1F931..1F932 ; Basic_Emoji ; breast-feeding..palms up together # E5.0 [2] (🤱..🤲)
1F933..1F93A ; Basic_Emoji ; selfie..person fencing # E3.0 [8] (🤳..🤺)
1F93C..1F93E ; Basic_Emoji ; people wrestling..person playing handball # E3.0 [3] (🤼..🤾)
1F931..1F932 ; Basic_Emoji ; breast-feeding # E5.0 [2] (🤱..🤲)
1F933..1F93A ; Basic_Emoji ; selfie # E3.0 [8] (🤳..🤺)
1F93C..1F93E ; Basic_Emoji ; people wrestling # E3.0 [3] (🤼..🤾)
1F93F ; Basic_Emoji ; diving mask # E12.0 [1] (🤿)
1F940..1F945 ; Basic_Emoji ; wilted flower..goal net # E3.0 [6] (🥀..🥅)
1F947..1F94B ; Basic_Emoji ; 1st place medal..martial arts uniform # E3.0 [5] (🥇..🥋)
1F940..1F945 ; Basic_Emoji ; wilted flower # E3.0 [6] (🥀..🥅)
1F947..1F94B ; Basic_Emoji ; 1st place medal # E3.0 [5] (🥇..🥋)
1F94C ; Basic_Emoji ; curling stone # E5.0 [1] (🥌)
1F94D..1F94F ; Basic_Emoji ; lacrosse..flying disc # E11.0 [3] (🥍..🥏)
1F950..1F95E ; Basic_Emoji ; croissant..pancakes # E3.0 [15] (🥐..🥞)
1F95F..1F96B ; Basic_Emoji ; dumpling..canned food # E5.0 [13] (🥟..🥫)
1F96C..1F970 ; Basic_Emoji ; leafy green..smiling face with hearts # E11.0 [5] (🥬..🥰)
1F94D..1F94F ; Basic_Emoji ; lacrosse # E11.0 [3] (🥍..🥏)
1F950..1F95E ; Basic_Emoji ; croissant # E3.0 [15] (🥐..🥞)
1F95F..1F96B ; Basic_Emoji ; dumpling # E5.0 [13] (🥟..🥫)
1F96C..1F970 ; Basic_Emoji ; leafy green # E11.0 [5] (🥬..🥰)
1F971 ; Basic_Emoji ; yawning face # E12.0 [1] (🥱)
1F972 ; Basic_Emoji ; smiling face with tear # E13.0 [1] (🥲)
1F973..1F976 ; Basic_Emoji ; partying face..cold face # E11.0 [4] (🥳..🥶)
1F977..1F978 ; Basic_Emoji ; ninja..disguised face # E13.0 [2] (🥷..🥸)
1F973..1F976 ; Basic_Emoji ; partying face # E11.0 [4] (🥳..🥶)
1F977..1F978 ; Basic_Emoji ; ninja # E13.0 [2] (🥷..🥸)
1F979 ; Basic_Emoji ; face holding back tears # E14.0 [1] (🥹)
1F97A ; Basic_Emoji ; pleading face # E11.0 [1] (🥺)
1F97B ; Basic_Emoji ; sari # E12.0 [1] (🥻)
1F97C..1F97F ; Basic_Emoji ; lab coat..flat shoe # E11.0 [4] (🥼..🥿)
1F980..1F984 ; Basic_Emoji ; crab..unicorn # E1.0 [5] (🦀..🦄)
1F985..1F991 ; Basic_Emoji ; eagle..squid # E3.0 [13] (🦅..🦑)
1F992..1F997 ; Basic_Emoji ; giraffe..cricket # E5.0 [6] (🦒..🦗)
1F998..1F9A2 ; Basic_Emoji ; kangaroo..swan # E11.0 [11] (🦘..🦢)
1F9A3..1F9A4 ; Basic_Emoji ; mammoth..dodo # E13.0 [2] (🦣..🦤)
1F9A5..1F9AA ; Basic_Emoji ; sloth..oyster # E12.0 [6] (🦥..🦪)
1F9AB..1F9AD ; Basic_Emoji ; beaver..seal # E13.0 [3] (🦫..🦭)
1F9AE..1F9AF ; Basic_Emoji ; guide dog..white cane # E12.0 [2] (🦮..🦯)
1F9B0..1F9B9 ; Basic_Emoji ; red hair..supervillain # E11.0 [10] (🦰..🦹)
1F9BA..1F9BF ; Basic_Emoji ; safety vest..mechanical leg # E12.0 [6] (🦺..🦿)
1F97C..1F97F ; Basic_Emoji ; lab coat # E11.0 [4] (🥼..🥿)
1F980..1F984 ; Basic_Emoji ; crab # E1.0 [5] (🦀..🦄)
1F985..1F991 ; Basic_Emoji ; eagle # E3.0 [13] (🦅..🦑)
1F992..1F997 ; Basic_Emoji ; giraffe # E5.0 [6] (🦒..🦗)
1F998..1F9A2 ; Basic_Emoji ; kangaroo # E11.0 [11] (🦘..🦢)
1F9A3..1F9A4 ; Basic_Emoji ; mammoth # E13.0 [2] (🦣..🦤)
1F9A5..1F9AA ; Basic_Emoji ; sloth # E12.0 [6] (🦥..🦪)
1F9AB..1F9AD ; Basic_Emoji ; beaver # E13.0 [3] (🦫..🦭)
1F9AE..1F9AF ; Basic_Emoji ; guide dog # E12.0 [2] (🦮..🦯)
1F9B0..1F9B9 ; Basic_Emoji ; red hair # E11.0 [10] (🦰..🦹)
1F9BA..1F9BF ; Basic_Emoji ; safety vest # E12.0 [6] (🦺..🦿)
1F9C0 ; Basic_Emoji ; cheese wedge # E1.0 [1] (🧀)
1F9C1..1F9C2 ; Basic_Emoji ; cupcake..salt # E11.0 [2] (🧁..🧂)
1F9C3..1F9CA ; Basic_Emoji ; beverage box..ice # E12.0 [8] (🧃..🧊)
1F9C1..1F9C2 ; Basic_Emoji ; cupcake # E11.0 [2] (🧁..🧂)
1F9C3..1F9CA ; Basic_Emoji ; beverage box # E12.0 [8] (🧃..🧊)
1F9CB ; Basic_Emoji ; bubble tea # E13.0 [1] (🧋)
1F9CC ; Basic_Emoji ; troll # E14.0 [1] (🧌)
1F9CD..1F9CF ; Basic_Emoji ; person standing..deaf person # E12.0 [3] (🧍..🧏)
1F9D0..1F9E6 ; Basic_Emoji ; face with monocle..socks # E5.0 [23] (🧐..🧦)
1F9E7..1F9FF ; Basic_Emoji ; red envelope..nazar amulet # E11.0 [25] (🧧..🧿)
1FA70..1FA73 ; Basic_Emoji ; ballet shoes..shorts # E12.0 [4] (🩰..🩳)
1F9CD..1F9CF ; Basic_Emoji ; person standing # E12.0 [3] (🧍..🧏)
1F9D0..1F9E6 ; Basic_Emoji ; face with monocle # E5.0 [23] (🧐..🧦)
1F9E7..1F9FF ; Basic_Emoji ; red envelope # E11.0 [25] (🧧..🧿)
1FA70..1FA73 ; Basic_Emoji ; ballet shoes # E12.0 [4] (🩰..🩳)
1FA74 ; Basic_Emoji ; thong sandal # E13.0 [1] (🩴)
1FA75..1FA77 ; Basic_Emoji ; light blue heart..pink heart # E15.0 [3] (🩵..🩷)
1FA78..1FA7A ; Basic_Emoji ; drop of blood..stethoscope # E12.0 [3] (🩸..🩺)
1FA7B..1FA7C ; Basic_Emoji ; x-ray..crutch # E14.0 [2] (🩻..🩼)
1FA80..1FA82 ; Basic_Emoji ; yo-yo..parachute # E12.0 [3] (🪀..🪂)
1FA83..1FA86 ; Basic_Emoji ; boomerang..nesting dolls # E13.0 [4] (🪃..🪆)
1FA87..1FA88 ; Basic_Emoji ; maracas..flute # E15.0 [2] (🪇..🪈)
1FA90..1FA95 ; Basic_Emoji ; ringed planet..banjo # E12.0 [6] (🪐..🪕)
1FA96..1FAA8 ; Basic_Emoji ; military helmet..rock # E13.0 [19] (🪖..🪨)
1FAA9..1FAAC ; Basic_Emoji ; mirror ball..hamsa # E14.0 [4] (🪩..🪬)
1FAAD..1FAAF ; Basic_Emoji ; folding hand fan..khanda # E15.0 [3] (🪭..🪯)
1FAB0..1FAB6 ; Basic_Emoji ; fly..feather # E13.0 [7] (🪰..🪶)
1FAB7..1FABA ; Basic_Emoji ; lotus..nest with eggs # E14.0 [4] (🪷..🪺)
1FABB..1FABD ; Basic_Emoji ; hyacinth..wing # E15.0 [3] (🪻..🪽)
1FABF ; Basic_Emoji ; goose # E15.0 [1] (🪿)
1FAC0..1FAC2 ; Basic_Emoji ; anatomical heart..people hugging # E13.0 [3] (🫀..🫂)
1FAC3..1FAC5 ; Basic_Emoji ; pregnant man..person with crown # E14.0 [3] (🫃..🫅)
1FACE..1FACF ; Basic_Emoji ; moose..donkey # E15.0 [2] (🫎..🫏)
1FAD0..1FAD6 ; Basic_Emoji ; blueberries..teapot # E13.0 [7] (🫐..🫖)
1FAD7..1FAD9 ; Basic_Emoji ; pouring liquid..jar # E14.0 [3] (🫗..🫙)
1FADA..1FADB ; Basic_Emoji ; ginger root..pea pod # E15.0 [2] (🫚..🫛)
1FAE0..1FAE7 ; Basic_Emoji ; melting face..bubbles # E14.0 [8] (🫠..🫧)
1FAE8 ; Basic_Emoji ; shaking face # E15.0 [1] (🫨)
1FAF0..1FAF6 ; Basic_Emoji ; hand with index finger and thumb crossed..heart hands # E14.0 [7] (🫰..🫶)
1FAF7..1FAF8 ; Basic_Emoji ; leftwards pushing hand..rightwards pushing hand # E15.0 [2] (🫷..🫸)
1FA78..1FA7A ; Basic_Emoji ; drop of blood # E12.0 [3] (🩸..🩺)
1FA7B..1FA7C ; Basic_Emoji ; x-ray # E14.0 [2] (🩻..🩼)
1FA80..1FA82 ; Basic_Emoji ; yo-yo # E12.0 [3] (🪀..🪂)
1FA83..1FA86 ; Basic_Emoji ; boomerang # E13.0 [4] (🪃..🪆)
1FA90..1FA95 ; Basic_Emoji ; ringed planet # E12.0 [6] (🪐..🪕)
1FA96..1FAA8 ; Basic_Emoji ; military helmet # E13.0 [19] (🪖..🪨)
1FAA9..1FAAC ; Basic_Emoji ; mirror ball # E14.0 [4] (🪩..🪬)
1FAB0..1FAB6 ; Basic_Emoji ; fly # E13.0 [7] (🪰..🪶)
1FAB7..1FABA ; Basic_Emoji ; lotus # E14.0 [4] (🪷..🪺)
1FAC0..1FAC2 ; Basic_Emoji ; anatomical heart # E13.0 [3] (🫀..🫂)
1FAC3..1FAC5 ; Basic_Emoji ; pregnant man # E14.0 [3] (🫃..🫅)
1FAD0..1FAD6 ; Basic_Emoji ; blueberries # E13.0 [7] (🫐..🫖)
1FAD7..1FAD9 ; Basic_Emoji ; pouring liquid # E14.0 [3] (🫗..🫙)
1FAE0..1FAE7 ; Basic_Emoji ; melting face # E14.0 [8] (🫠..🫧)
1FAF0..1FAF6 ; Basic_Emoji ; hand with index finger and thumb crossed # E14.0 [7] (🫰..🫶)
00A9 FE0F ; Basic_Emoji ; copyright # E0.6 [1] (©️)
00AE FE0F ; Basic_Emoji ; registered # E0.6 [1] (®️)
203C FE0F ; Basic_Emoji ; double exclamation mark # E0.6 [1] (‼️)
@ -528,13 +517,12 @@
1F6F0 FE0F ; Basic_Emoji ; satellite # E0.7 [1] (🛰️)
1F6F3 FE0F ; Basic_Emoji ; passenger ship # E0.7 [1] (🛳️)
# Total elements: 1386
# Total elements: 1366
# ================================================
# Emoji_Keycap_Sequence
0023 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: \x{23} # E0.6 [1] (#️⃣)
002A FE0F 20E3; Emoji_Keycap_Sequence ; keycap: * # E2.0 [1] (*️⃣)
0030 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 0 # E0.6 [1] (0⃣)
@ -555,7 +543,6 @@
# RGI_Emoji_Flag_Sequence: This list does not include deprecated or macroregion flags, except for UN and EU.
# See Annex B of TR51 for more information.
1F1E6 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Ascension Island # E2.0 [1] (🇦🇨)
1F1E6 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Andorra # E2.0 [1] (🇦🇩)
1F1E6 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: United Arab Emirates # E2.0 [1] (🇦🇪)
@ -821,7 +808,6 @@
# RGI_Emoji_Tag_Sequence: See Annex C of TR51 for more information.
1F3F4 E0067 E0062 E0065 E006E E0067 E007F; RGI_Emoji_Tag_Sequence; flag: England # E5.0 [1] (🏴󠁧󠁢󠁥󠁮󠁧󠁿)
1F3F4 E0067 E0062 E0073 E0063 E0074 E007F; RGI_Emoji_Tag_Sequence; flag: Scotland # E5.0 [1] (🏴󠁧󠁢󠁳󠁣󠁴󠁿)
1F3F4 E0067 E0062 E0077 E006C E0073 E007F; RGI_Emoji_Tag_Sequence; flag: Wales # E5.0 [1] (🏴󠁧󠁢󠁷󠁬󠁳󠁿)
@ -832,7 +818,6 @@
# RGI_Emoji_Modifier_Sequence
261D 1F3FB ; RGI_Emoji_Modifier_Sequence ; index pointing up: light skin tone # E1.0 [1] (☝🏻)
261D 1F3FC ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium-light skin tone # E1.0 [1] (☝🏼)
261D 1F3FD ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium skin tone # E1.0 [1] (☝🏽)
@ -1238,11 +1223,11 @@
1F91C 1F3FD ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium skin tone # E3.0 [1] (🤜🏽)
1F91C 1F3FE ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium-dark skin tone # E3.0 [1] (🤜🏾)
1F91C 1F3FF ; RGI_Emoji_Modifier_Sequence ; right-facing fist: dark skin tone # E3.0 [1] (🤜🏿)
1F91D 1F3FB ; RGI_Emoji_Modifier_Sequence ; handshake: light skin tone # E14.0 [1] (🤝🏻)
1F91D 1F3FC ; RGI_Emoji_Modifier_Sequence ; handshake: medium-light skin tone # E14.0 [1] (🤝🏼)
1F91D 1F3FD ; RGI_Emoji_Modifier_Sequence ; handshake: medium skin tone # E14.0 [1] (🤝🏽)
1F91D 1F3FE ; RGI_Emoji_Modifier_Sequence ; handshake: medium-dark skin tone # E14.0 [1] (🤝🏾)
1F91D 1F3FF ; RGI_Emoji_Modifier_Sequence ; handshake: dark skin tone # E14.0 [1] (🤝🏿)
1F91D 1F3FB ; RGI_Emoji_Modifier_Sequence ; handshake: light skin tone # E3.0 [1] (🤝🏻)
1F91D 1F3FC ; RGI_Emoji_Modifier_Sequence ; handshake: medium-light skin tone # E3.0 [1] (🤝🏼)
1F91D 1F3FD ; RGI_Emoji_Modifier_Sequence ; handshake: medium skin tone # E3.0 [1] (🤝🏽)
1F91D 1F3FE ; RGI_Emoji_Modifier_Sequence ; handshake: medium-dark skin tone # E3.0 [1] (🤝🏾)
1F91D 1F3FF ; RGI_Emoji_Modifier_Sequence ; handshake: dark skin tone # E3.0 [1] (🤝🏿)
1F91E 1F3FB ; RGI_Emoji_Modifier_Sequence ; crossed fingers: light skin tone # E3.0 [1] (🤞🏻)
1F91E 1F3FC ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium-light skin tone # E3.0 [1] (🤞🏼)
1F91E 1F3FD ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium skin tone # E3.0 [1] (🤞🏽)
@ -1478,17 +1463,7 @@
1FAF6 1F3FD ; RGI_Emoji_Modifier_Sequence ; heart hands: medium skin tone # E14.0 [1] (🫶🏽)
1FAF6 1F3FE ; RGI_Emoji_Modifier_Sequence ; heart hands: medium-dark skin tone # E14.0 [1] (🫶🏾)
1FAF6 1F3FF ; RGI_Emoji_Modifier_Sequence ; heart hands: dark skin tone # E14.0 [1] (🫶🏿)
1FAF7 1F3FB ; RGI_Emoji_Modifier_Sequence ; leftwards pushing hand: light skin tone # E15.0 [1] (🫷🏻)
1FAF7 1F3FC ; RGI_Emoji_Modifier_Sequence ; leftwards pushing hand: medium-light skin tone # E15.0 [1] (🫷🏼)
1FAF7 1F3FD ; RGI_Emoji_Modifier_Sequence ; leftwards pushing hand: medium skin tone # E15.0 [1] (🫷🏽)
1FAF7 1F3FE ; RGI_Emoji_Modifier_Sequence ; leftwards pushing hand: medium-dark skin tone # E15.0 [1] (🫷🏾)
1FAF7 1F3FF ; RGI_Emoji_Modifier_Sequence ; leftwards pushing hand: dark skin tone # E15.0 [1] (🫷🏿)
1FAF8 1F3FB ; RGI_Emoji_Modifier_Sequence ; rightwards pushing hand: light skin tone # E15.0 [1] (🫸🏻)
1FAF8 1F3FC ; RGI_Emoji_Modifier_Sequence ; rightwards pushing hand: medium-light skin tone # E15.0 [1] (🫸🏼)
1FAF8 1F3FD ; RGI_Emoji_Modifier_Sequence ; rightwards pushing hand: medium skin tone # E15.0 [1] (🫸🏽)
1FAF8 1F3FE ; RGI_Emoji_Modifier_Sequence ; rightwards pushing hand: medium-dark skin tone # E15.0 [1] (🫸🏾)
1FAF8 1F3FF ; RGI_Emoji_Modifier_Sequence ; rightwards pushing hand: dark skin tone # E15.0 [1] (🫸🏿)
# Total elements: 655
# Total elements: 645
#EOF

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,13 @@
# emoji-zwj-sequences.txt
# Date: 2022-05-06, 16:14:52 GMT
# © 2022 Unicode®, Inc.
# Date: 2021-06-08, 05:19:16 GMT
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Emoji ZWJ Sequences for UTS #51
# Version: 15.0
# Version: 14.0
#
# For documentation and usage, see https://www.unicode.org/reports/tr51
# For documentation and usage, see http://www.unicode.org/reports/tr51
#
# Format:
# code_point(s) ; type_field ; description # comments
@ -1398,7 +1398,6 @@
1F3F4 200D 2620 FE0F ; RGI_Emoji_ZWJ_Sequence ; pirate flag # E11.0 [1] (🏴‍☠️)
1F408 200D 2B1B ; RGI_Emoji_ZWJ_Sequence ; black cat # E13.0 [1] (🐈‍⬛)
1F415 200D 1F9BA ; RGI_Emoji_ZWJ_Sequence ; service dog # E12.0 [1] (🐕‍🦺)
1F426 200D 2B1B ; RGI_Emoji_ZWJ_Sequence ; black bird # E15.0 [1] (🐦‍⬛)
1F43B 200D 2744 FE0F ; RGI_Emoji_ZWJ_Sequence ; polar bear # E13.0 [1] (🐻‍❄️)
1F441 FE0F 200D 1F5E8 FE0F ; RGI_Emoji_ZWJ_Sequence ; eye in speech bubble # E2.0 [1] (👁️‍🗨️)
1F62E 200D 1F4A8 ; RGI_Emoji_ZWJ_Sequence ; face exhaling # E13.1 [1] (😮‍💨)
@ -1406,6 +1405,6 @@
1F636 200D 1F32B FE0F ; RGI_Emoji_ZWJ_Sequence ; face in clouds # E13.1 [1] (😶‍🌫️)
1F9D1 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus # E13.0 [1] (🧑‍🎄)
# Total elements: 14
# Total elements: 13
#EOF

View file

@ -114,7 +114,7 @@ END {
print " (nconc (char-table-range composition-function-table (car elt))"
print " (list (vector (cdr elt)"
print " 0"
print " #'compose-gstring-for-graphic)))))"
print " 'compose-gstring-for-graphic)))))"
print ";; The following two blocks are derived by hand from emoji-sequences.txt"
print ";; FIXME: add support for Emoji_Keycap_Sequence once we learn how to respect FE0F/VS-16"
@ -126,7 +126,7 @@ END {
print " (nconc (char-table-range composition-function-table '(#x1F1E6 . #x1F1FF))"
print " (list (vector \"[\\U0001F1E6-\\U0001F1FF][\\U0001F1E6-\\U0001F1FF]\""
print " 0"
print " #'compose-gstring-for-graphic))))"
print " 'compose-gstring-for-graphic))))"
print ";; UK Flags"
print "(set-char-table-range composition-function-table"
@ -134,7 +134,7 @@ END {
print " (nconc (char-table-range composition-function-table #x1F3F4)"
print " (list (vector \"\\U0001F3F4\\U000E0067\\U000E0062\\\\(?:\\U000E0065\\U000E006E\\U000E0067\\\\|\\U000E0073\\U000E0063\\U000E0074\\\\|\\U000E0077\\U000E006C\\U000E0073\\\\)\\U000E007F\""
print " 0"
print " #'compose-gstring-for-graphic))))"
print " 'compose-gstring-for-graphic))))"
printf "\n(provide 'emoji-zwj)"
}

View file

@ -89,7 +89,6 @@
;; PROPn: string representing the nth property value
(eval-when-compile (require 'cl-lib))
(require 'generate-lisp-file)
(defvar unidata-list nil)
@ -210,15 +209,9 @@ Property value is one of the following symbols:
;; The assignment of default values to blocks of code points
;; follows the file DerivedBidiClass.txt from the Unicode
;; Character Database (UCD).
(L (#x0600 #x07BF AL) (#x0860 #x08FF AL) (#xFB50 #xFDCF AL)
(#xFDF0 #xFDFF AL) (#xFE70 #xFEFF AL) (#x10D00 #x10D3F AL)
(#x10EC0 #x10EFF AL) (#x10F30 #x10F6F AL) (#x1EC70 #x1ECBF AL)
(#x1ED00 #x1ED4F AL) (#x1EE00 #x1EEFF AL)
(#x0590 #x05FF R) (#x07C0 #x085F R) (#xFB1D #xFB4F R)
(#x10800 #x10CFF R) (#x10D40 #x10EBF R) (#x10F00 #x10F2F R)
(#x10F70 #x10FFF R) (#x1E800 #x1EC6F R) (#x1ECC0 #x1ECFF R)
(#x1ED50 #x1EDFF R) (#x1EF00 #x1EFFF R)
(#x20A0 #x20CF ET))
(L (#x0600 #x06FF AL) (#xFB50 #xFDFF AL) (#xFE70 #xFEFF AL)
(#x0590 #x05FF R) (#x07C0 #x08FF R)
(#xFB1D #xFB4F R) (#x10800 #x10FFF R) (#x1E800 #x1EFFF R))
;; The order of elements must be in sync with bidi_type_t in
;; src/dispextern.h.
(L R EN AN BN B AL LRE LRO RLE RLO PDF LRI RLI FSI PDI
@ -1083,8 +1076,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(defun unidata--ensure-compiled (&rest funcs)
(dolist (fun funcs)
(unless (compiled-function-p (symbol-function fun))
(byte-compile fun))))
(or (byte-code-function-p (symbol-function fun))
(byte-compile fun))))
(defun unidata-gen-table-name (prop index &rest _ignore)
(let* ((table (unidata-gen-table-word-list prop index 'unidata-split-name))
@ -1423,13 +1416,13 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(or elt (user-error "Unknown output file: %s" basename))
(or noninteractive (message "Generating %s..." file))
(with-temp-file file
(generate-lisp-file-heading
basename 'unidata-gen-file
:commentary (concat copyright " \
The sources for this file are found in the admin/unidata/ directory in \
the Emacs sources. The Unicode data files are used under the \
Unicode Terms of Use, as contained in the file copyright.html in that \
same directory."))
(insert ";;; " basename " -*- lexical-binding:t -*-
;; " copyright "
;; Generated from Unicode data files by unidata-gen.el.
;; The sources for this file are found in the admin/unidata/ directory in
;; the Emacs sources. The Unicode data files are used under the
;; Unicode Terms of Use, as contained in the file copyright.html in that
;; same directory.\n")
(dolist (proplist (cdr elt))
(let ((prop (unidata-prop-prop proplist))
(index (unidata-prop-index proplist))
@ -1447,189 +1440,38 @@ same directory."))
(set-char-table-extra-slot table 3 describer))
(insert (format "(define-char-code-property '%S\n %S\n %S)\n"
prop table docstring))))
(generate-lisp-file-trailer basename :inhibit-provide t))))
(insert ";; Local Variables:\n"
";; coding: utf-8\n"
";; version-control: never\n"
";; no-byte-compile: t\n"
";; no-update-autoloads: t\n"
";; End:\n\n"
(format ";;; %s ends here\n" basename)))))
(or noninteractive (message "Generating %s...done" file)))
(defun unidata-gen-charprop (&optional charprop-file text)
(defun unidata-gen-charprop (&optional charprop-file)
(or charprop-file (setq charprop-file (pop command-line-args-left)))
(with-temp-file charprop-file
(generate-lisp-file-heading
charprop-file 'unidata-gen-charprop
:commentary "See the admin/unidata/ directory in the Emacs sources.")
(if text
(insert text)
(dolist (elt unidata-file-alist)
(dolist (proplist (cdr elt))
(insert (format "(define-char-code-property '%S %S\n %S)\n"
(unidata-prop-prop proplist) (car elt)
(unidata-prop-docstring proplist))))))
(insert ";; Automatically generated by unidata-gen.el."
" -*- lexical-binding: t -*-\n"
";; See the admin/unidata/ directory in the Emacs sources.\n")
(dolist (elt unidata-file-alist)
(dolist (proplist (cdr elt))
(insert (format "(define-char-code-property '%S %S\n %S)\n"
(unidata-prop-prop proplist) (car elt)
(unidata-prop-docstring proplist)))))
(or noninteractive (message "Writing %s..." charprop-file))
(generate-lisp-file-trailer charprop-file)))
(defun unidata-gen-scripts (&optional file)
;; Running from Makefile.
(unless file
(setq file (pop command-line-args-left)))
(let ((aliases (unidata-gen--read-script-aliases))
(table (make-char-table nil))
(segmented (make-hash-table :test #'equal)))
;; First parse the scripts.
(with-temp-buffer
(unidata-gen--insert-file "Scripts.txt")
(while (not (eobp))
;; 1700..1711 ; Tagalog # Lo [18] TAGALOG LETTER A..TAGALOG
(when (looking-at "\\([0-9A-F]+\\)\\(?:\\.\\.\\([0-9A-F]+\\)\\)? +; +\\([^ ]+\\) +#")
(let ((start (string-to-number (match-string 1) 16))
(end (and (match-string 2)
(string-to-number (match-string 2) 16)))
(scripts (list (intern (string-replace
"_" "-"
(downcase (match-string 3)))))))
(set-char-table-range
table (if end (cons start end) start) scripts)))
(forward-line 1)))
;; Then parse the file that lists "other scripts" that characters
;; may appear in, and add those.
(with-temp-buffer
(unidata-gen--insert-file "ScriptExtensions.txt")
(while (not (eobp))
;; 102E0 ; Arab Copt # Mn COPTIC EPACT THOUSANDS MARK
(when (looking-at "\\([0-9A-F]+\\)\\(?:\\.\\.\\([0-9A-F]+\\)\\)? +; +\\([^#]+\\)")
(let ((start (string-to-number (match-string 1) 16))
(end (and (match-string 2)
(string-to-number (match-string 2) 16)))
(scripts
(mapcar
(lambda (alias)
(intern (string-replace
"_" "-" (downcase
(gethash alias aliases)))))
(split-string (string-trim (match-string 3))))))
(dolist (script scripts)
(dotimes (i (- (1+ (or end start)) start))
(set-char-table-range
table (+ i start)
(append (elt table (+ i start)) (list script)))))))
(forward-line 1)))
;; Then go through the data and collect into buckets based on
;; identical script lists.
(map-char-table
(lambda (key value)
;; `map-char-table' is reused, so copy it.
(push (if (consp key)
(cons (car key) (cdr key))
key)
;; Keep the first element first, but sort the rest.
(gethash (cons (car value)
(sort (remq (car value) value) #'string<))
segmented)))
table)
;; Then go through the data and collect into buckets based on
(let ((scripts nil))
(maphash
(lambda (segment chars)
(push (cons segment chars) scripts))
segmented)
(setq scripts (sort scripts (lambda (s1 s2)
(string< (caar s1) (caar s2)))))
(with-temp-buffer
(insert "(textsec--create-script-table '(\n")
(dolist (script scripts)
(insert "(" (prin1-to-string (car script)) "\n")
(insert " " (prin1-to-string (cdr script)))
(insert ")\n"))
(insert "))\n")
;; Write the file.
(unidata-gen-charprop file (buffer-string))))))
(defun unidata-gen--read-script-aliases ()
(let ((aliases (make-hash-table :test #'equal)))
(with-temp-buffer
(unidata-gen--insert-file "PropertyValueAliases.txt")
(unless (re-search-forward "^# Script " nil t)
(error "Can't find the Script section"))
(forward-line 2)
(while (looking-at "sc *;")
(let ((elem (split-string (buffer-substring (point) (line-end-position))
";" nil "[ \t]+")))
(setf (gethash (nth 1 elem) aliases)
(nth 2 elem)))
(forward-line 1))
aliases)))
(defun unidata-gen--insert-file (name)
(insert-file-contents
(expand-file-name (concat "../admin/unidata/" name)
data-directory)))
(defun unidata-gen-confusable (&optional file)
;; Running from Makefile.
(unless file
(setq file (pop command-line-args-left)))
(let ((regexp
(concat "^\\([[:xdigit:]]+\\)"
"[ \t]*;[ \t]*"
"\\([[:space:][:xdigit:]]+\\)"
"[ \t]*;"))
(map (make-hash-table)))
(with-temp-buffer
(unidata-gen--insert-file "confusables.txt")
(while (re-search-forward regexp nil t)
(let ((from (match-string 1))
(to (string-trim (match-string 2))))
(setf (gethash (string-to-number from 16) map)
(apply #'string (mapcar (lambda (string)
(string-to-number string 16))
(split-string to)))))))
(with-temp-buffer
(insert "(defconst uni-confusable-table\n")
(let ((print-length nil))
(prin1 map (current-buffer)))
(insert ")")
(unidata-gen-charprop file (buffer-string)))))
(defun unidata-gen-idna-mapping (&optional file)
;; Running from Makefile.
(unless file
(setq file (pop command-line-args-left)))
(let ((map (make-char-table nil)))
(with-temp-buffer
(unidata-gen--insert-file "IdnaMappingTable.txt")
(while (re-search-forward "^\\([0-9A-F]+\\)\\(?:\\.\\.\\([0-9A-F]+\\)\\)? +; +\\([^ ]+\\) +\\(?:; +\\([ 0-9A-F]+\\)\\)?"
nil t)
(let ((start (match-string 1))
(end (match-string 2))
(status (match-string 3))
(mapped (match-string 4)))
;; Make reading the file slightly faster by using `t'
;; instead of `disallowed' all over the place.
(when (string-match-p "\\`disallowed" status)
(setq status "t"))
(unless (or (equal status "valid")
(equal status "deviation"))
(set-char-table-range
map
(if end
(cons (string-to-number start 16)
(string-to-number end 16))
(string-to-number start 16))
(cond
((equal status "mapped")
(apply #'string
(mapcar (lambda (char)
(string-to-number char 16))
(split-string (string-trim mapped)))))
(t
(intern status))))))))
(with-temp-buffer
(insert "(defconst idna-mapping-table\n")
(let ((print-length nil))
(prin1 map (current-buffer)))
(insert ")")
(unidata-gen-charprop file (buffer-string)))))
(insert "\n"
"(provide 'charprop)\n"
" \n"
";; Local Variables:\n"
";; coding: utf-8\n"
";; version-control: never\n"
";; no-byte-compile: t\n"
";; no-update-autoloads: t\n"
";; End:\n\n"
(format ";;; %s ends here\n"
(file-name-nondirectory charprop-file)))))

View file

@ -31,8 +31,6 @@
# updated and some should not be, due to registration numbers, so
# this script leaves these copyright years alone for now.
set -o nounset
: ${UPDATE_COPYRIGHT_USE_INTERVALS=1}
export UPDATE_COPYRIGHT_USE_INTERVALS

View file

@ -4,7 +4,7 @@
## Copyright (C) 2011-2023 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org>
## Maintainer: Stefan Kangas <stefankangas@gmail.com>
## Maintainer: emacs-devel@gnu.org
## This file is part of GNU Emacs.
@ -32,10 +32,19 @@
### Code:
source "${0%/*}/emacs-shell-lib"
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
PN=${0##*/} # basename of script
PD=${0%/*}
[ "$PD" = "$0" ] && PD=. # if PATH includes PWD
## This should be the admin directory.
cd $PD || exit
cd $PD
cd ../
[ -d admin ] || die "Could not locate admin directory"
@ -44,7 +53,7 @@ cd ../
usage ()
{
cat 1>&2 <<EOF
Usage: ${PN} [-f] [-c] [-q] [-A dir] [-L] [-C] [-- make-flags]
Usage: ${PN} [-f] [-c] [-q] [-A dir] [-I] [-L] [-C] [-- make-flags]
Update some auto-generated files in the Emacs tree.
By default, only does the versioned loaddefs-like files in lisp/.
This requires a build. Passes any non-option args to make (eg -- -j2).
@ -54,6 +63,8 @@ Options:
commit them (caution).
-q: be quiet; only give error messages, not status messages.
-A: only update autotools files, copying into specified dir.
-H: also update ChangeLog.${changelog_n}
-I: also update info/dir.
-L: also update ldefs-boot.el.
-C: start from a clean state. Slower, but more correct.
EOF
@ -70,9 +81,14 @@ clean=
autogendir= # was "autogen"
ldefs_flag=1
lboot_flag=
info_flag=
changelog_flag=
## Parameters.
ldefs_in=lisp/loaddefs.el
ldefs_out=lisp/ldefs-boot.el
changelog_n=$(sed -n 's/CHANGELOG_HISTORY_INDEX_MAX *= *//p' Makefile.in)
changelog_files="ChangeLog.$changelog_n"
sources="configure.ac lib/Makefile.am"
## Files to copy into autogendir.
## Everything:
@ -84,16 +100,18 @@ genfiles="
## msdos-only:
genfiles="src/config.in"
basegen=""
for g in $genfiles; do
basegen="$basegen ${g##*/}"
done
[ "$basegen" ] || die "internal error"
tempfile="$(emacs_mktemp)"
tempfile=/tmp/$PN.$$
while getopts ":hcfqA:CL" option ; do
trap "rm -f $tempfile 2> /dev/null" EXIT
while getopts ":hcfqA:HCIL" option ; do
case $option in
(h) usage ;;
@ -109,6 +127,10 @@ while getopts ":hcfqA:CL" option ; do
(C) clean=1 ;;
(H) changelog_flag=1 ;;
(I) info_flag=1 ;;
(L) lboot_flag=1 ;;
(\?) die "Bad option -$OPTARG" ;;
@ -133,7 +155,6 @@ status ()
local stat file modified
modified=""
while read stat file; do
[ "$stat" != "M" ] && \
@ -151,7 +172,7 @@ status ()
echo "Checking input file status..."
## The lisp portion could be more permissive, eg only care about .el files.
modified=$(status ${autogendir:+$sources} ${ldefs_flag:+lisp}) || die
modified=$(status ${autogendir:+$sources} ${ldefs_flag:+lisp} ${info_flag:+doc}) || die
[ "$modified" ] && {
echo "Locally modified: $modified"
@ -166,6 +187,8 @@ modified=$(status ${autogendir:+$sources} ${ldefs_flag:+lisp}) || die
echo "Running 'make maintainer-clean'..."
make maintainer-clean #|| die "Cleaning error"
rm -f $ldefs_in
}
@ -212,8 +235,65 @@ commit ()
} # function commit
## No longer used since info/dir is now generated at install time if needed,
## and is not in the repository any more.
info_dir ()
{
local basefile=build-aux/dir_top outfile=info/dir
echo "Regenerating info/dir..."
## Header contains non-printing characters, so this is more
## reliable than using echo.
rm -f $outfile
cp $basefile $outfile
local topic file dircat dirent
## FIXME inefficient looping.
for topic in "Texinfo documentation system" "Emacs" "GNU Emacs Lisp" \
"Emacs editing modes" "Emacs network features" "Emacs misc features" \
"Emacs lisp libraries"; do
cat - <<EOF >> $outfile
$topic
EOF
## Bit faster than doc/*/*.texi.
for file in doc/emacs/emacs.texi doc/lispintro/*.texi \
doc/lispref/elisp.texi doc/misc/*.texi; do
## FIXME do not ignore w32 if OS is w32.
case $file in
*-xtra.texi|*efaq-w32.texi) continue ;;
esac
dircat=$(sed -n -e 's/@value{emacsname}/Emacs/' -e 's/^@dircategory //p' $file)
## TODO warn about unknown topics (check-info in top-level
## Makefile does this).
[ "$dircat" = "$topic" ] || continue
sed -n -e 's/@value{emacsname}/Emacs/' \
-e 's/@acronym{\([A-Z]*\)}/\1/' \
-e '/^@direntry/,/^@end direntry/ s/^\([^@]\)/\1/p' \
$file >> $outfile
done
done
local modified
modified=$(status $outfile) || die
commit "info/dir" $modified || die "commit error"
} # function info_dir
[ "$autogendir" ] && {
oldpwd=$PWD
cp $genfiles $autogendir/
cd $autogendir || die "cd error for $autogendir"
@ -228,6 +308,9 @@ commit ()
} # $autogendir
[ "$info_flag" ] && info_dir
[ "$ldefs_flag" ] || exit 0
@ -276,13 +359,18 @@ make -C src "$@" bootstrap-emacs || die "make src error"
echo "Running lisp/ make..."
make -C lisp "$@" ldefs-boot.el EMACS=../src/bootstrap-emacs || die "make src error"
make -C lisp "$@" autoloads EMACS=../src/bootstrap-emacs || die "make src error"
## Ignore comment differences.
[ ! "$lboot_flag" ] || \
diff -q -I '^;' $ldefs_in $ldefs_out || \
cp $ldefs_in $ldefs_out || die "cp ldefs_boot error"
# Refresh the prebuilt grammar-wy.el
grammar_in=lisp/cedet/semantic/grammar-wy.el
grammar_out=lisp/cedet/semantic/grm-wy-boot.el
make -C admin/grammars/ ../../$grammar_in EMACS=../../src/bootstrap-emacs
make -C admin/grammars/ ../../$grammar_in
cp $grammar_in $grammar_out || die "cp grm_wy_boot error"
@ -297,4 +385,14 @@ modified=$(status $genfiles $ldefs_out $grammar_out) || die
commit "loaddefs" $modified || die "commit error"
## Less important than the other stuff, so do it last.
[ ! "$changelog_flag" ] || {
make change-history-nocommit || die "make change-history error"
modified=$(status $changelog_files) || die
commit "ChangeLog" $modified || die "commit error"
}
exit 0
### update_autogen ends here

View file

@ -36,7 +36,14 @@
### Code:
source "${0%/*}/emacs-shell-lib"
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
PN=${0##*/} # basename of script
usage ()
{

View file

@ -35,7 +35,7 @@
progs="autoconf"
## Minimum versions we need:
autoconf_min=`sed -n 's/^ *AC_PREREQ(\[\([0-9\.]*\)]).*/\1/p' configure.ac`
autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac`
## $1 = program, eg "autoconf".
@ -340,8 +340,7 @@ git_config diff.texinfo.xfuncname \
tailored_hooks=
sample_hooks=
for hook in commit-msg pre-commit prepare-commit-msg post-commit \
pre-push commit-msg-files.awk; do
for hook in commit-msg pre-commit prepare-commit-msg; do
cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
tailored_hooks="$tailored_hooks $hook"
done

View file

@ -4,7 +4,7 @@
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2023-01-01'
timestamp='2022-01-09'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -966,12 +966,6 @@ EOF
GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
;;
x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
;;
*:[Mm]anagarm:*:*)
GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
;;
*:Minix:*:*)
GUESS=$UNAME_MACHINE-unknown-minix
;;
@ -1042,7 +1036,7 @@ EOF
k1om:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
loongarch32:Linux:*:* | loongarch64:Linux:*:*)
loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
m32r*:Linux:*:*)
@ -1157,27 +1151,16 @@ EOF
;;
x86_64:Linux:*:*)
set_cc_for_build
CPU=$UNAME_MACHINE
LIBCABI=$LIBC
if test "$CC_FOR_BUILD" != no_compiler_found; then
ABI=64
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __i386__
ABI=x86
#else
#ifdef __ILP32__
ABI=x32
#endif
#endif
EOF
cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
eval "$cc_set_abi"
case $ABI in
x86) CPU=i686 ;;
x32) LIBCABI=${LIBC}x32 ;;
esac
if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_X32 >/dev/null
then
LIBCABI=${LIBC}x32
fi
fi
GUESS=$CPU-pc-linux-$LIBCABI
GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
;;
xtensa*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
@ -1384,11 +1367,8 @@ EOF
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
GUESS=i586-pc-haiku
;;
ppc:Haiku:*:*) # Haiku running on Apple PowerPC
GUESS=powerpc-apple-haiku
;;
*:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
GUESS=$UNAME_MACHINE-unknown-haiku
x86_64:Haiku:*:*)
GUESS=x86_64-unknown-haiku
;;
SX-4:SUPER-UX:*:*)
GUESS=sx4-nec-superux$UNAME_RELEASE

31
build-aux/config.sub vendored
View file

@ -4,7 +4,7 @@
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2023-01-21'
timestamp='2023-02-19'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -145,7 +145,7 @@ case $1 in
nto-qnx* | linux-* | uclinux-uclibc* \
| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
| storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
| storm-chaos* | os2-emx* | rtmk-nova*)
basic_machine=$field1
basic_os=$maybe_os
;;
@ -1075,7 +1075,7 @@ case $cpu-$vendor in
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
cpu=i586
;;
pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
cpu=i686
;;
pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
@ -1207,7 +1207,7 @@ case $cpu-$vendor in
| k1om \
| le32 | le64 \
| lm32 \
| loongarch32 | loongarch64 \
| loongarch32 | loongarch64 | loongarchx32 \
| m32c | m32r | m32rle \
| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
@ -1341,10 +1341,6 @@ EOF
kernel=linux
os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
;;
managarm*)
kernel=managarm
os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
;;
*)
kernel=
os=$basic_os
@ -1758,7 +1754,7 @@ case $os in
| onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
| midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
| nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
| fiwix* | mlibc* )
| fiwix* )
;;
# This one is extra strict with allowed versions
sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
@ -1766,9 +1762,6 @@ case $os in
;;
none)
;;
kernel* )
# Restricted further below
;;
*)
echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
exit 1
@ -1779,26 +1772,16 @@ esac
# (given a valid OS), if there is a kernel.
case $kernel-$os in
linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
| linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
| linux-musl* | linux-relibc* | linux-uclibc* )
;;
uclinux-uclibc* )
;;
managarm-mlibc* | managarm-kernel* )
;;
-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
exit 1
;;
-kernel* )
echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
exit 1
;;
*-kernel* )
echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
exit 1
;;
kfreebsd*-gnu* | kopensolaris*-gnu*)
;;
vxworks-simlinux | vxworks-simwindows | vxworks-spe)

View file

@ -1,128 +0,0 @@
# Check the file list of GNU Emacs change log entries for each commit SHA.
# Copyright 2023 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
# 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 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
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Commentary:
# This script accepts a list of (unabbreviated) Git commit SHAs, and
# will then iterate over them to check that any files mentioned in the
# commit message are actually present in the commit's diff. If not,
# it will print out the incorrect file names and return 1.
# You can also pass "-v reason=pre-push", which will add more-verbose
# output, indicating the abbreviated commit SHA and first line of the
# commit message for any improper commits.
### Code:
function get_commit_changes(commit_sha, changes, cmd, i, j, len, \
bits, filename) {
# Collect all the files touched in the specified commit.
cmd = ("git show --name-status --first-parent --format= " commit_sha)
while ((cmd | getline) > 0) {
for (i = 2; i <= NF; i++) {
len = split($i, bits, "/")
for (j = 1; j <= len; j++) {
if (j == 1)
filename = bits[j]
else
filename = filename "/" bits[j]
changes[filename] = 1
}
}
}
close(cmd)
}
function check_commit_msg_files(commit_sha, verbose, changes, good, \
cmd, msg, filenames_str, filenames, i) {
get_commit_changes(commit_sha, changes)
good = 1
cmd = ("git log -1 --format=%B " commit_sha)
while ((cmd | getline) > 0) {
if (verbose && ! msg)
msg = $0
# Find file entries in the commit message. We look at any line
# starting with "*" (possibly prefixed by "; ") followed by a ":",
# possibly on a different line. If we encounter a blank line
# without seeing a ":", then we don't treat that as a file entry.
# Accumulate the contents of a (possible) file entry.
if (/^[ \t]*$/)
filenames_str = ""
else if (/^(; )?\*[ \t]+[[:alnum:]]/)
filenames_str = $0
else if (filenames_str)
filenames_str = (filenames_str $0)
# We have a file entry; analyze it.
if (filenames_str && /:/) {
# Delete the leading "*" and any trailing information.
sub(/^(; )?\*[ \t]+/, "", filenames_str)
sub(/[ \t]*[[(<:].*$/, "", filenames_str)
# There might be multiple files listed in this entry, separated
# by spaces (and possibly a comma). Iterate over each of them.
split(filenames_str, filenames, ",[ \t]+")
for (i in filenames) {
# Remove trailing slashes from any directory entries.
sub(/\/$/, "", filenames[i])
if (length(filenames[i]) && ! (filenames[i] in changes)) {
if (good) {
# Print a header describing the error.
if (verbose)
printf("In commit %s \"%s\"...\n", substr(commit_sha, 1, 10), msg)
printf("Files listed in commit message, but not in diff:\n")
}
printf(" %s\n", filenames[i])
good = 0
}
}
filenames_str = ""
}
}
close(cmd)
return good
}
BEGIN {
if (reason == "pre-push")
verbose = 1
}
/^[a-z0-9]{40}$/ {
if (! check_commit_msg_files($0, verbose)) {
status = 1
}
}
END {
if (status != 0) {
if (reason == "pre-push")
error_msg = "Push aborted"
else
error_msg = "Bad commit message"
printf("%s; please see the file 'CONTRIBUTE'\n", error_msg)
}
exit status
}

View file

@ -1,47 +0,0 @@
#!/bin/sh
# Check the file list of GNU Emacs change log entries after committing.
# Copyright 2023 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
# 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 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
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Commentary:
# This hook runs after a commit is finalized and checks that the files
# mentioned in the commit message match the diff. We perform this in
# the post-commit phase so that we can be sure we properly detect all
# the files in the diff (this is difficult during the commit-msg hook,
# since there's no cross-platform way to detect when a commit is being
# amended).
# However, since this is a post-commit hook, it's too late to error
# out and abort the commit: it's already done! As a result, this hook
# is purely advisory, and instead we error out when trying to push
# (see "pre-push" in this directory).
### Code:
HOOKS_DIR=`dirname "$0"`
# Prefer gawk if available, as it handles NUL bytes properly.
if type gawk >/dev/null 2>&1; then
awk="gawk"
else
awk="awk"
fi
git rev-parse HEAD | $awk -v reason=post-commit \
-f "$HOOKS_DIR"/commit-msg-files.awk

View file

@ -1,88 +0,0 @@
#!/bin/sh
# Check the file list of GNU Emacs change log entries before pushing.
# Copyright 2023 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
# 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 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
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Commentary:
# This hook runs before pushing a series of commits and checks that
# the files mentioned in each commit message match the diffs. This
# helps ensure that the resulting change logs are correct, which
# should prevent errors when generating etc/AUTHORS.
# These checks also happen in the "post-commit" hook (which see), but
# that hook can't abort a commit; it just advises the committer to fix
# the commit so that this hook runs without errors.
### Code:
HOOKS_DIR=`dirname "$0"`
# Prefer gawk if available, as it handles NUL bytes properly.
if type gawk >/dev/null 2>&1; then
awk="gawk"
else
awk="awk"
fi
# Standard input receives lines of the form:
# <local ref> SP <local sha> SP <remote ref> SP <remote sha> LF
$awk -v origin_name="$1" '
# If the local SHA is all zeroes, ignore it.
$2 ~ /^0{40}$/ {
next
}
# Check any lines with a valid local SHA and whose remote ref is
# master or an emacs-NN release branch. (We want to avoid checking
# feature or scratch branches here.)
$2 ~ /^[a-z0-9]{40}$/ && $3 ~ /^refs\/heads\/(master|emacs-[0-9]+)$/ {
newref = $2
# If the remote SHA is all zeroes, this is a new object to be
# pushed (likely a branch)...
if ($4 ~ /^0{40}$/) {
back = 0
# ... Go backwards until we find a SHA on an origin branch.
# Stop trying after 1000 commits, just in case...
for (back = 0; back < 1000; back++) {
cmd = ("git branch -r -l '\''" origin_name "/*'\''" \
" --contains " newref "~" back)
rv = (cmd | getline)
close(cmd)
if (rv > 0)
break;
}
cmd = ("git rev-parse " newref "~" back)
cmd | getline oldref
if (!(oldref ~ /^[a-z0-9]{40}$/)) {
# The SHA is misformatted! Skip this line.
next
}
close(cmd)
} else if ($4 ~ /^[a-z0-9]{40}$/) {
oldref = $4
} else {
# The SHA is misformatted! Skip this line.
next
}
# Print every SHA after oldref, up to (and including) newref.
system("git rev-list --first-parent --reverse " oldref ".." newref)
}
' | $awk -v reason=pre-push -f "$HOOKS_DIR"/commit-msg-files.awk

View file

@ -35,7 +35,7 @@
eval 'exec perl -wSx "$0" "$@"'
if 0;
my $VERSION = '2022-01-27 18:49'; # UTC
my $VERSION = '2021-02-24 23:42'; # UTC
# The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook

View file

@ -7,7 +7,7 @@
#
# This program 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)
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
@ -137,7 +137,7 @@
eval 'exec perl -wSx -0777 -pi "$0" "$@"'
if 0;
my $VERSION = '2023-01-11.04:24'; # UTC
my $VERSION = '2020-04-04.15:07'; # UTC
# The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook
@ -280,7 +280,7 @@ if (defined $stmt_re)
}
# Replace the old copyright statement.
s/$stmt_re/$stmt_wrapped/g;
s/$stmt_re/$stmt_wrapped/;
}
}
else

View file

@ -276,7 +276,6 @@ cd lib
Rem Rename files like djtar on plain DOS filesystem would.
If Exist c++defs.h update c++defs.h cxxdefs.h
If Exist alloca.in.h update alloca.in.h alloca.in-h
If Exist assert.in.h update assert.in.h assert.in-h
If Exist byteswap.in.h update byteswap.in.h byteswap.in-h
If Exist dirent.in.h update dirent.in.h dirent.in-h
If Exist errno.in.h update errno.in.h errno.in-h
@ -302,7 +301,6 @@ If Exist sys_time.in.h update sys_time.in.h sys_time.in-h
If Exist sys_types.in.h update sys_types.in.h sys_types.in-h
If Exist time.in.h update time.in.h time.in-h
If Exist unistd.in.h update unistd.in.h unistd.in-h
If Exist stdckdint.in.h update stdckdint.in.h stdckdint.in-h
If Exist gnulib.mk.in update gnulib.mk.in gnulib.mk-in
Rem Only repository has the msdos/autogen directory
If Exist Makefile.in sed -f ../msdos/sedlibcf.inp < Makefile.in > makefile.tmp
@ -312,9 +310,6 @@ rm -f makefile.tmp
sed -f ../msdos/sedlibcf.inp < gnulib.mk-in > gnulib.tmp
sed -f ../msdos/sedlibmk.inp < gnulib.tmp > gnulib.mk
rm -f gnulib.tmp
Rem Create directories in lib/ that MKDIR_P is supposed to create
Rem but I have no idea how to do that on MS-DOS.
mkdir sys
Rem Create .d files for new files in lib/ and lib/malloc/
If Not Exist deps\stamp mkdir deps
for %%f in (*.c) do @call ..\msdos\depfiles.bat %%f

File diff suppressed because it is too large Load diff

View file

@ -1356,7 +1356,7 @@
* dired.texi (Dired Deletion, Marks vs Flags): Document Emacs 24.3
changes to the mark and unmark commands.
(Comparison in Dired): Document changes to dired-diff. Remove M-=,
(Comparison in Dired): Document chages to dired-diff. Remove M-=,
which is no longer bound to dired-backup-diff.
2012-10-23 Bastien Guerry <bzg@gnu.org>
@ -2711,7 +2711,7 @@
of list-faces-display here, from Standard Faces node.
Note special role of `default' background.
(Standard Faces): Note special role of `default' background.
Note that region face may be taken from GTK. Add xref to Text Display.
Note that region face may be taken fom GTK. Add xref to Text Display.
(Text Scale): Rename from "Temporary Face Changes".
Callers changed. Don't bother documenting variable-pitch-mode.
(Font Lock): Copyedits. Remove font-lock-maximum-size.
@ -8529,7 +8529,7 @@
* text.texi (Cell Justification):
* trouble.texi (After a Crash):
* xresources.texi (GTK styles):
Delete duplicate words.
Delete duplicate duplicate words.
2005-07-17 Richard M. Stallman <rms@gnu.org>

View file

@ -140,7 +140,6 @@ EMACSSOURCES= \
${srcdir}/xresources.texi \
${srcdir}/anti.texi \
${srcdir}/macos.texi \
$(srcdir)/haiku.texi \
${srcdir}/msdos.texi \
${srcdir}/gnu.texi \
${srcdir}/glossary.texi \

View file

@ -106,10 +106,8 @@ taken as the expansion. For example, to define the abbrev @samp{foo} as
mentioned above, insert the text @samp{find outer otter} and then type
@kbd{C-u 3 C-x a g f o o @key{RET}}.
If you're using @code{transient-mark-mode} (which is the default),
the active region will be used as the expansion of the abbrev being
defined. If not, an argument of zero to @kbd{C-x a g} means to use
the contents of the region.
An argument of zero to @kbd{C-x a g} means to use the contents of the
region as the expansion of the abbrev being defined.
@kindex C-x a l
@findex add-mode-abbrev
@ -276,7 +274,7 @@ Edit a list of abbrevs; you can add, alter or remove definitions.
@example
@var{various other tables@dots{}}
(lisp-mode-abbrev-table)
"ks" 0 "keymap-set"
"dk" 0 "define-key"
(global-abbrev-table)
"dfn" 0 "definition"
@end example
@ -413,13 +411,10 @@ away in the buffer to search for an expansion.
@vindex dabbrev-check-all-buffers
@vindex dabbrev-check-other-buffers
@vindex dabbrev-ignored-buffer-modes
After scanning the current buffer, @kbd{M-/} normally searches other
buffers. The variables @code{dabbrev-check-all-buffers} and
@code{dabbrev-check-other-buffers} can be used to determine which
other buffers, if any, are searched. Buffers that have major modes
derived from any of the modes in @code{dabbrev-ignored-buffer-modes}
are ignored.
other buffers, if any, are searched.
@vindex dabbrev-ignored-buffer-names
@vindex dabbrev-ignored-buffer-regexps

View file

@ -4,155 +4,134 @@
@c See file emacs.texi for copying conditions.
@node Antinews
@appendix Emacs 28 Antinews
@appendix Emacs 27 Antinews
@c Update the emacs.texi Antinews menu entry with the above version number.
For those users who live backwards in time, here is information
about downgrading to Emacs version 28.2. We hope you will enjoy the
about downgrading to Emacs version 27.2. We hope you will enjoy the
greater simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
@item
Like its newer releases, Emacs 28 can still be built with support of
native compilation of Lisp programs. However, in preparation for
removal of this feature in some previous version, we've deleted the
capability of ahead-of-time native compilation of all the Lisp files
that come with Emacs. This makes the Emacs build process much faster.
Emacs can no longer be built with support of native compilation of
Lisp programs. This means Emacs builds much faster, and the problems
that came with native compilation: the need to have GCC and Binutils
installed, the complications of managing your @file{eln-cache}
directories---all of that is now future history. The simplicity and
elegance of the Emacs byte-compiled code is now restored in all of its
pristine beauty.
@item
Emacs can no longer be built with the tree-sitter library, so you no
longer will need to look for and install the grammar libraries for
the languages in which you want to program. Similarly, all the modes
that are based on the tree-sitter library were deleted, leaving you
with just one major mode for every supported programming language: no
more need to decide whether to turn the tree-sitter supported modes on
and try using their parser-based fontification, indentation, and other
features. For some languages and file types, this means no major mode
at all, leaving you with the venerable Fundamental mode as the
natural, high-performance choice. For example, Go, Rust, and CMake
files no longer have any major modes for editing their files ---
another milestone towards a simpler, leaner Emacs.
Emacs no longer builds by default with Cairo, even if it's present.
The warnings about not using HarfBuzz are also gone, in preparation
for complete removal of HarfBuzz support in previous Emacs versions.
Fancy text shaping and display is becoming less important as you move
back in time. The @code{ftx} font backend is again part of Emacs, for
the same reasons.
@item
Built-in support for accessing SQLite databases was removed. You can
now again edit SQLite files as simple binary files, which Emacs is
quite capable to support, as it always did.
Emacs once again supports versions 5.3 and older OpenBSD systems,
which will be needed as you move back in time.
@item
As a gesture to users of the Haiku operating system, we've dropped the
code which allowed Emacs to be built on that OS@. We expect Haiku
users to enjoy the much simpler editors they have for editing their
files.
We've dropped support for Secure Computing filter on GNU/Linux. The
past world is much more secure than the present, so the complexities
related with this stuff, which can only be explained by severe
paranoia, are no longer justified.
@item
Support for XInput2 input events on X is gone. We think the
traditional X input events are more than enough, certainly so as you
move back in time, where XInput2 will eventually be removed from X as
well, once the maintainers of the X Windows system realize the utter
futility of supporting fancy input mechanisms.
Emacs reverted back to supporting Unicode 13.x, since the following
versions of the standards are not yet published where you are going.
The @samp{emoji} script and the support for displaying Emoji sequences
were removed for the same reasons: no one will produce them in the
past.
@item
The ``pure GTK'' (a.k.a.@: @acronym{PGTK}) configuration of Emacs is
no longer supported. This is in anticipation of the complete removal
of the GTK toolkit support from Emacs, and in accordance with our
expectation that GTK will cease to exist as you move back in time. We
plan on removing support for all the other toolkits as well, leaving
only the pure X build with our own widgets as the single supported GUI
configuration on X.
Mode-specific commands and the @kbd{M-S-x} command that invokes them
were removed. As you move back in time, the command set in Emacs
becomes smaller, so any such filtering of applicable commands just
gets in the way.
@item
The @option{--init-directory} command-line option was removed, as
initializing Emacs with init files of another user is a preposterous
idea anyway.
We have removed the system for displaying documentation of groups of
related functions, the @kbd{shortdoc-display-group} command to go with
it, and the corresponding ``See also'' button in the @file{*Help*}
buffer. That should make searching for certain functions simpler:
just use the venerable @samp{apropos} commands.
@item
In line with simplifying and eventually removing the
native-compilation option, we've deleted the
@option{--with-native-compilation=aot} configure-time option. This
greatly simplifies how native compilation works and makes your
configure-time decision regarding native compilation in Emacs
clear-cut: either Emacs compiles non-preloaded Lisp packages to native
code only before using it, or it never uses native compilation at all;
no more half measures and special exceptions. For similar reasons,
@code{native-compile-prune-cache} and
@code{startup-redirect-eln-cache} features are no longer part of
Emacs.
The @code{context-menu-mode} was removed, and with it the context
menus popped by pressing the right mouse button. This is one small
step towards freeing Emacs (and eventually, the whole world of
computing) from the tyranny of the GUI pointing devices in general,
and moving back to the simplicity of text-mode user interfaces.
Down with mice and other rodents!
@item
We've deleted the special code and features which allowed Emacs to
present decent performance and responsiveness when editing files with
very long lines. Such files become more and more rare as time goes
back, and so having all this tricky code in Emacs for their benefit
was deemed an unnecessary complication.
The commands @kbd{C-x 4 4} and @kbd{C-x 5 5} for displaying the
results in a new window/frame re gone. We are quite certain that
creating a new window/frame before running a command is much simpler,
and doesn't require a complication of a new prefix.
@item
Emacs dropped support for Eglot and the LSP servers. We decided that
the built-in ways of analyzing source code are more than enough as you
move back in time.
The behavior of active minibuffers when switching frames is now the
perfect mess it should be: sometimes the minibuffer moves to the new
selected frame, sometimes it doesn't, and sometimes you get an error.
This makes Emacs usage much more fun, as you get to guess the result,
instead of having it boringly consistent.
@item
Commands to scale and rotate images are once again bound to single
keys like @kbd{+}, @kbd{-}, and @kbd{r}, which makes them much easier
to type. As for the risk of typing these by mistake, we don't believe
Emacs users make typing mistakes, especially as they move back in
time and become younger and younger.
Compact mode-line display mode has been removed. The items displayed
on the mode line are now always in the same place, and if there's not
enough space for them, they are not displayed at all, instead of being
confusingly displayed in a different position. You no longer need to
think twice where to find a particular mode-line element on display.
@item
To simplify typing popular commands, we've rebound the @w{@kbd{C-x 8 . .}}
back to @w{@kbd{C-x 8 .}} and @w{@kbd{C-x 8 = =}} back to @w{@kbd{C-x 8 =}}.
There's no need for fancier, longer key sequences, as moving back in
time means we will have fewer and fewer commands to bind to them in
the first place.
Many commands and options related to tab bars were removed, including
(but not limited to) frame-specific appearance of tab bars, the
@code{tab-bar-format} option, the @kbd{C-x t n}, @kbd{C-x t N},
@kbd{C-x t M}, and @kbd{C-x t G} commands, and many mouse gestures on
the tab bar. We are going to delete the tab bar support from Emacs in
one of the past versions, and this is a step in that direction.
@item
If you inadvertently kill the @file{*scratch*} buffer, Emacs will
recreate it in Fundamental mode, not in Lisp Interaction mode. You
get to turn on the mode you like yourself. Our long-term plans for
past Emacs releases is to remove the recreation of @file{*scratch*}
altogether, and this is the first step in that direction.
The ``transient'' input methods have been removed; use @kbd{C-\} to
turn input methods on and off instead. This is in preparation for
complete removal of input methods from Emacs in version 19, and
consistent with the fact that the number of input methods we support
becomes smaller as you move back in time.
@item
Support for @code{rlogin} and @code{rsh} protocols are back, since we
expect them to become more and more important and popular as you move
back in time.
We disabled @code{show-paren-mode} by default, since we think the
venerable @code{blink-matching-paren} feature is more than enough, and
better fits the simplicity of past Emacs versions. It will definitely
be better when colors are removed from Emacs in the distant past.
For the same reason, sub-groups in interactive regexp searches are no
longer highlighted in distinct colors.
@item
In preparation for eventual removal of Unicode support from Emacs,
we've downgraded our Unicode support to version 14.0.
On our permanent quest for simplifying Emacs, we've removed the Ispell
command @code{ispell-comment-or-string-at-point}; the old-time friend
@code{ispell-comments-and-strings} should suffice.
@item
You can no longer change the size of the font globally. Since Emacs
will at some past date remove all support for variable-size fonts,
having such commands is a luxury we are better without.
Many Gnus commands and options were deemed to unnecessarily complicate
the use of Gnus (which is too complex to begin with), and thus were
removed. This includes @code{gnus-topic-display-predicate},
@code{gnus-process-mark-toggle}, @code{gnus-registry-register-all},
@code{gnus-paging-select-next}, and many others. The @code{nnselect}
backend was deleted for the same reason.
@item
On our permanent quest for simplifying Emacs, we've removed the
commands @code{duplicate-line} and @code{duplicate-dwim}; the old-time
friends @kbd{M-w} and @kbd{C-y} (typed one or more times) should
suffice. The command @code{rename-visited-file} is gone for the same
reason.
@item
We've deleted many commands related to Emoji, which were bound in the
@kbd{C-x 8 e} prefix keymap. We decided that the ability to type
Emoji sequences using @kbd{C-x 8 @key{RET}} is enough, and actually
serves our users better by requiring them to know the codepoints of
the sequences they want to type.
@item
We dropped support for many scripts and input methods, especially old
scripts that no one uses anyway. For similar reasons, Greek and
Ukrainian translations of the Emacs tutorial are not available
anymore.
@item
@file{package.el} can no longer fetch source code of packages from
their VCS repositories. We think command-line tools like Git should
be enough to allow you to clone their repositories. So we deleted
the @code{package-vc-install} command and other similar commands.
The @file{project.el} package have been redesigned to remove many
unnecessary features, so that just the bare essentials remain. We
plan on removing this package from Emacs in a previous version, but
decided to begin with removing some extra features first.
@item
To keep up with decreasing computer memory capacity and disk space, many
other functions and files have been eliminated in Emacs 28.2.
other functions and files have been eliminated in Emacs 27.2.
@end itemize

View file

@ -347,11 +347,11 @@ move to the column number specified by the argument's numeric value.
@kindex C-x C-n
@findex set-goal-column
Use the current column of point as the @dfn{semipermanent goal column}
(@code{set-goal-column}) in the current buffer. When a semipermanent
goal column is in effect, @kbd{C-n}, @kbd{C-p}, @kbd{<prior>} and
@kbd{<next>} always try to move to this column, or as close as
possible to it, after moving vertically. The goal column remains in
effect until canceled.
for @kbd{C-n} and @kbd{C-p} (@code{set-goal-column}) in the current
buffer. When a semipermanent goal column is in effect, those commands
always try to move to this column, or as close as possible to it,
after moving vertically. The goal column remains in effect until
canceled.
@item C-u C-x C-n
Cancel the goal column. Henceforth, @kbd{C-n} and @kbd{C-p} try to
@ -653,14 +653,14 @@ Toggle automatic display of the current line number or column number.
displayed before each line, see @ref{Display Custom}.
@item M-=
Display the number of lines, sentences, words, and characters that are
present in the region (@code{count-words-region}). @xref{Mark}, for
information about the region.
Display the number of lines, words, and characters that are present in
the region (@code{count-words-region}). @xref{Mark}, for information
about the region.
@item M-x count-words
Display the number of lines, sentences, words, and characters that are
present in the buffer. If the region is active (@pxref{Mark}),
display the numbers for the region instead.
Display the number of lines, words, and characters that are present in
the buffer. If the region is active (@pxref{Mark}), display the
numbers for the region instead.
@item C-x =
Display the character code of character after point, character position of
@ -689,7 +689,7 @@ narrowed region and the line number relative to the whole buffer.
@kindex M-=
@findex count-words-region
@kbd{M-=} (@code{count-words-region}) displays a message reporting
the number of lines, sentences, words, and characters in the region
the number of lines, words, and characters in the region
(@pxref{Mark}, for an explanation of the region). With a prefix
argument, @kbd{C-u M-=}, the command displays a count for the entire
buffer.
@ -887,40 +887,19 @@ z z z}. The first @kbd{C-x z} repeats the command once, and each
subsequent @kbd{z} repeats it once again.
@findex repeat-mode
@findex describe-repeat-maps
@vindex repeat-exit-key
@vindex repeat-exit-timeout
You can also activate @code{repeat-mode} which allows repeating
commands bound to sequences of two or more keys by typing a single
character. For example, after typing @w{@kbd{C-x u}} (@code{undo},
@pxref{Undo}) to undo the most recent edits, you can undo many more
edits by typing @w{@kbd{u u u@dots{}}}. Similarly, type @w{@kbd{C-x o
o o@dots{}}} instead of @w{@kbd{C-x o C-x o C-x o@dots{}}} to switch
to the window several windows away. This works by entering a
transient repeating mode after you type the full key sequence that
invokes the command; the single-key shortcuts are shown in the echo
area.
Only some commands support repetition in @code{repeat-mode}; type
@w{@kbd{M-x describe-repeat-maps @key{RET}}} to see which ones.
The single-character shortcuts enabled by the transient repeating mode
do not need to be identical: for example, after typing @w{@kbd{C-x
@{}}, either @kbd{@{} or @kbd{@}} or @kbd{^} or @kbd{v}, or any series
that mixes these characters in any order, will resize the selected
window in respective ways. Similarly, after @w{@kbd{M-g n}} or
@kbd{M-g p}, typing any sequence of @kbd{n} and/or @kbd{p} in any mix
will repeat @code{next-error} and @code{previous-error} to navigate in
a @file{*compilation*} or @file{*grep*} buffer (@pxref{Compilation
Mode}).
Typing any key other than those defined to repeat the previous command
exits the transient repeating mode, and then the key you typed is
executed normally. You can also define a key which will exit the
transient repeating mode @emph{without} executing the key which caused
the exit. To this end, customize the user option
@code{repeat-exit-key} to name a key; one natural value is @key{RET}.
Finally, it's possible to break the repetition chain automatically
after some amount of idle time: customize the user option
@code{repeat-exit-timeout} to specify the idle time in seconds after
which this transient repetition mode will be turned off automatically.
Also you can activate @code{repeat-mode} that temporarily enables a
transient mode with short keys after a limited number of commands.
Currently supported shorter key sequences are @kbd{C-x u u} instead of
@kbd{C-x u C-x u} to undo many changes, @kbd{C-x o o} instead of
@kbd{C-x o C-x o} to switch several windows, @kbd{C-x @{ @{ @} @} ^ ^
v v} to resize the selected window interactively, @kbd{M-g n n p p} to
navigate @code{next-error} matches, and @kbd{C-x ] ] [ [} to navigate
through pages. Any other key exits transient mode and then is
executed normally. The user option @code{repeat-exit-key} defines an
additional key to exit this transient mode. Also it's possible to
break the repetition chain automatically after some idle time by
customizing the user option @code{repeat-exit-timeout} to specify the
idle time in seconds after which this transient mode will be turned
off.

View file

@ -630,24 +630,22 @@ buffer, but killing an indirect buffer has no effect on its base buffer.
One way to use indirect buffers is to display multiple views of an
outline. @xref{Outline Views}.
@vindex clone-indirect-buffer-hook
A quick and handy way to make an indirect buffer is with the command
@kbd{C-x 4 c} (@code{clone-indirect-buffer-other-window}). It creates
and selects an indirect buffer whose base buffer is the current
buffer. With a numeric argument, it prompts for the name of the
indirect buffer; otherwise it uses the name of the current buffer,
with a @samp{<@var{n}>} suffix added.
@kbd{M-x clone-indirect-buffer}. It creates and selects an indirect
buffer whose base buffer is the current buffer. With a numeric
argument, it prompts for the name of the indirect buffer; otherwise it
uses the name of the current buffer, with a @samp{<@var{n}>} suffix
added. @kbd{C-x 4 c} (@code{clone-indirect-buffer-other-window})
works like @kbd{M-x clone-indirect-buffer}, but it selects the new
buffer in another window. These functions run the hook
@code{clone-indirect-buffer-hook} after creating the indirect buffer.
The more general way to make an indirect buffer is with the command
@kbd{M-x make-indirect-buffer}. It creates an indirect buffer
named @var{indirect-name} from a buffer @var{base-buffer}, prompting for
both using the minibuffer.
@vindex clone-indirect-buffer-hook
The functions that create indirect buffers run the hook
@code{clone-indirect-buffer-hook} after creating the indirect buffer.
When this hook runs, the newly created indirect buffer is the current
buffer.
Note: When a modification is made to the text of a buffer, the
modification hooks are run only in the base buffer, because most of
the functions on those hooks are not prepared to work correctly in

View file

@ -138,14 +138,6 @@ of environment variable settings; each element should be a string of
the form @code{"@var{envvarname}=@var{value}"}. These environment
variable settings override the usual ones.
@vindex compilation-max-output-line-length
Displaying extremely long lines in compilation output can slow Emacs
down. Lines that are longer than
@code{compilation-max-output-line-length} will have the portion that's
exceeds that limit hidden behind a button that can be clicked on to
reveal the hidden portion. Set this variable to @code{nil} to never
hide anything.
@node Compilation Mode
@section Compilation Mode
@ -178,9 +170,7 @@ list of customization variables and faces.
If you change the variable
@code{compilation-auto-jump-to-first-error} to a non-@code{nil} value,
Emacs automatically visits the locus of the first error message that
appears in the @file{*compilation*} buffer. (This variable can also
have the values @code{if-location-known} and @code{first-known}, which
modify the conditions for automatically visiting the error locus.)
appears in the @file{*compilation*} buffer.
Compilation mode provides the following additional commands. These
commands can also be used in @file{*grep*} buffers, where the
@ -289,19 +279,6 @@ window so that the current error message is @var{n} lines from the
top, whether or not there is a fringe; the default value, @code{nil},
gives the behavior described above.
@vindex compilation-hidden-output
Compilation output can sometimes be very verbose, and much of it isn't
of particular interest to a user. The
@code{compilation-hidden-output} user option should either be a regexp
or a list of regexps, and output that matches will be made invisible.
For instance, to hide the verbose output from recursive makefiles, you
can say something like:
@lisp
(setq compilation-hidden-output
'("^make[^\n]+\n"))
@end lisp
@vindex compilation-error-regexp-alist
@vindex grep-regexp-alist
To parse messages from the compiler, Compilation mode uses the
@ -961,7 +938,9 @@ the fringe of a source buffer to set a breakpoint there.
@vindex gud-gdb-command-name
To run GDB using just the GUD interaction buffer interface, without
these additional features, use @kbd{M-x gud-gdb} (@pxref{Starting
GUD}).
GUD}). You must use this if you want to debug multiple programs
within one Emacs session, as that is currently unsupported by @kbd{M-x
gdb}.
Internally, @kbd{M-x gdb} informs GDB that its screen size is
unlimited; for correct operation, you must not change GDB's screen
@ -1049,9 +1028,9 @@ to restore only when @code{gdb-show-main} is non-@code{nil}.
You may also specify additional GDB-related buffers to display,
either in the same frame or a different one. Select the buffers you
want by typing @kbd{M-x gdb-display-@var{buffertype}-buffer} or
@kbd{M-x gdb-frame-@var{buffertype}-buffer}, where @var{buffertype} is
the relevant buffer type, such as @samp{breakpoints} or @samp{io}.
You can do the same from the menu bar, with the @samp{GDB-Windows} and
@kbd{M-x gdb-frame-@var{buffertype}-buffer}, where @var{buffertype}
is the relevant buffer type, such as @samp{breakpoints}. You can do
the same with the menu bar, with the @samp{GDB-Windows} and
@samp{GDB-Frames} sub-menus of the @samp{GUD} menu.
@vindex gdb-max-source-window-count
@ -1271,14 +1250,10 @@ non-@code{nil} value.
@node Other GDB Buffers
@subsubsection Other GDB Buffers
Other buffers provided by @kbd{M-x gdb} whose display you can
optionally request include:
@table @asis
@findex gdb-display-locals-buffer
@item Locals Buffer
This buffer displays the values of local variables of the current
stack frame for simple data types (@pxref{Frame Info, Frame Info,
frame for simple data types (@pxref{Frame Info, Frame Info,
Information on a frame, gdb, The GNU debugger}). Press @key{RET} or
click @kbd{mouse-2} on the value if you want to edit it.
@ -1288,35 +1263,20 @@ you can examine the value of the local variable at point by typing
GDB, use @key{RET} or @kbd{mouse-2} on the type description
(@samp{[struct/union]} or @samp{[array]}). @xref{Watch Expressions}.
To display the Locals buffer, type @kbd{M-x gdb-display-locals-buffer}.
@findex gdb-display-io-buffer
@item I/O Buffer
If the program you are debugging uses standard input and output
streams for interaction with the user, or emits a significant amount
of output to its standard output, you may wish to separate its I/O
from interaction with GDB. Use the command @w{@kbd{M-x
gdb-display-io-buffer}} to show a window with a buffer to which Emacs
redirects the input and output from the program you are debugging.
@findex gdb-display-registers-buffer
@item Registers Buffer
@findex toggle-gdb-all-registers
This buffer displays the values held by the registers
(@pxref{Registers,,, gdb, The GNU debugger}). Request the display of
this buffer with the command @kbd{M-x gdb-display-registers-buffer}.
Press @key{RET} or click @kbd{mouse-2} on a register if you want to
edit its value. With GDB 6.4 or later, recently changed register
values display with @code{font-lock-warning-face}.
(@pxref{Registers,,, gdb, The GNU debugger}). Press @key{RET} or
click @kbd{mouse-2} on a register if you want to edit its value. With
GDB 6.4 or later, recently changed register values display with
@code{font-lock-warning-face}.
@findex gdb-display-disassembly-buffer
@item Assembler Buffer
The assembler buffer displays the current frame as machine code. An
arrow points to the current instruction, and you can set and remove
breakpoints as in a source buffer. Breakpoint icons also appear in
the fringe or margin. To request the display of this buffer, use
@kbd{M-x gdb-display-disassembly-buffer}.
the fringe or margin.
@findex gdb-display-memory-buffer
@item Memory Buffer
The memory buffer lets you examine sections of program memory
(@pxref{Memory, Memory, Examining memory, gdb, The GNU debugger}).
@ -1324,8 +1284,7 @@ Click @kbd{mouse-1} on the appropriate part of the header line to
change the starting address or number of data items that the buffer
displays. Alternatively, use @kbd{S} or @kbd{N} respectively. Click
@kbd{mouse-3} on the header line to select the display format or unit
size for these data items. Use @w{@kbd{M-x
gdb-display-memory-buffer}} to request display of this buffer.
size for these data items.
@end table
When @code{gdb-many-windows} is non-@code{nil}, the locals buffer
@ -1556,26 +1515,18 @@ command prompts for a @dfn{library name} rather than a file name; it
searches through each directory in the Emacs Lisp load path, trying to
find a file matching that library name. If the library name is
@samp{@var{foo}}, it tries looking for files named
@file{@var{foo}.elc}, @file{@var{foo}.el}, and @file{@var{foo}}. (If
Emacs was built with native compilation enabled, @code{load-library}
looks for a @samp{.eln} file that corresponds to @file{@var{foo}.el}
and loads it instead of @file{@var{foo}.elc}.) The default behavior
is to load the first file found. This command prefers @file{.eln}
files over @file{.elc} files, and prefers @file{.elc} files over
@file{.el} files, because compiled files load and run faster. If it
finds that @file{@var{lib}.el} is newer than @file{@var{lib}.elc}, it
issues a warning, in case someone made changes to the @file{.el} file
and forgot to recompile it, but loads the @file{.elc} file anyway.
(Due to this behavior, you can save unfinished edits to Emacs Lisp
source files, and not recompile until your changes are ready for use.)
If you set the option @code{load-prefer-newer} to a non-@code{nil}
value, however, then rather than the procedure described above, Emacs
loads whichever version of the file is newest. If Emacs was built
with native compilation, and it cannot find the @samp{.eln} file
corresponding to @file{@var{lib}.el}, it will load a
@file{@var{lib}.elc} and start native compilation of
@file{@var{lib}.el} in the background, then load the @samp{.eln} file
when it finishes compilation.
@file{@var{foo}.elc}, @file{@var{foo}.el}, and @file{@var{foo}}. The
default behavior is to load the first file found. This command
prefers @file{.elc} files over @file{.el} files because compiled files
load and run faster. If it finds that @file{@var{lib}.el} is newer
than @file{@var{lib}.elc}, it issues a warning, in case someone made
changes to the @file{.el} file and forgot to recompile it, but loads
the @file{.elc} file anyway. (Due to this behavior, you can save
unfinished edits to Emacs Lisp source files, and not recompile until
your changes are ready for use.) If you set the option
@code{load-prefer-newer} to a non-@code{nil} value, however, then
rather than the procedure described above, Emacs loads whichever
version of the file is newest.
Emacs Lisp programs usually load Emacs Lisp files using the
@code{load} function. This is similar to @code{load-library}, but is
@ -1612,11 +1563,6 @@ It is customary to put locally installed libraries in the
@code{load-path}, or in some subdirectory of @file{site-lisp}. This
way, you don't need to modify the default value of @code{load-path}.
@vindex native-comp-eln-load-path
Similarly to @code{load-path}, the list of directories where Emacs
looks for @file{*.eln} files with natively-compiled Lisp code is
specified by the variable @code{native-comp-eln-load-path}.
@cindex autoload
Some commands are @dfn{autoloaded}; when you run them, Emacs
automatically loads the associated library first. For instance, the
@ -1791,10 +1737,6 @@ which is provided for evaluating Emacs Lisp expressions interactively.
Its major mode is Lisp Interaction mode. You can also enable Lisp
Interaction mode by typing @kbd{M-x lisp-interaction-mode}.
@findex scratch-buffer
If you kill the @file{*scratch*} buffer, you can recreate it with
the @kbd{M-x scratch-buffer} command.
@findex eval-print-last-sexp
@kindex C-j @r{(Lisp Interaction mode)}
In the @file{*scratch*} buffer, and other Lisp Interaction mode

View file

@ -185,11 +185,6 @@ successfully.
@item --version
@opindex --version
Print Emacs version, then exit successfully.
@item --fingerprint
@opindex --fingerprint
Print the Emacs ``fingerprint'', which is used to uniquely identify
the compiled version of Emacs.
@end table
@node Initial Options
@ -294,22 +289,6 @@ which will invoke Emacs with @samp{--script} and supply the name of
the script file as @var{file}. Emacs Lisp then treats the @samp{#!}
on this first line as a comment delimiter.
@item -x
@opindex -x
This option can only be used in executable script files, and should be
invoked like this:
@example
#!/usr/bin/emacs -x
@end example
This is like @samp{--script}, but suppresses loading the init files
(like @code{--quick}), and can't be used on a normal command line
(since it doesn't specify the script to load). In addition, when it
reaches the end of the script, it exits Emacs and uses the value of
the final form as the exit value from the script (if the final value
is numerical). Otherwise, it will always exit with a zero value.
@item --no-build-details
@opindex --no-build-details
@cindex build details
@ -345,10 +324,6 @@ option does this too, but other options like @samp{-q} do not.
Do not include the @file{site-lisp} directories in @code{load-path}
(@pxref{Init File}). The @samp{-Q} option does this too.
@item --init-directory
@opindex --init-directory
Specify the directory to use when looking for the Emacs init files.
@item --no-splash
@opindex --no-splash
@cindex splash screen
@ -776,10 +751,6 @@ On MS-Windows, if you set this variable, Emacs will load and initialize
the network library at startup, instead of waiting until the first
time it is required.
@item WAYLAND_DISPLAY
Pgtk Emacs (built with @option{--with-pgtk}) can run on Wayland natively.
@env{WAYLAND_DISPLAY} specifies the connection to the compositor.
@item emacs_dir
On MS-Windows, @env{emacs_dir} is a special environment variable, which
indicates the full path of the directory in which Emacs is installed.

View file

@ -24,8 +24,8 @@ input.
GNU Emacs is primarily designed for use with the keyboard. While it
is possible to use the mouse to issue editing commands through the
menu bar and tool bar, that is usually not as efficient as using the
keyboard.
menu bar and tool bar, that is not as efficient as using the keyboard.
Therefore, this manual mainly documents how to edit with the keyboard.
@cindex control character
Keyboard input into Emacs is based on a heavily-extended version of
@ -67,10 +67,6 @@ where the @key{Meta} key does not function reliably.
Emacs supports 3 additional modifier keys, see @ref{Modifier Keys}.
Emacs has extensive support for using mouse buttons, mouse wheels
and other pointing devices like touchpads and touch screens.
@xref{Mouse Input}, for details.
@cindex keys stolen by window manager
@cindex window manager, keys stolen by
On graphical displays, the window manager might block some keyboard
@ -139,47 +135,6 @@ exception to this rule is @key{ESC}: @kbd{@key{ESC} C-h} is equivalent
to @kbd{C-M-h}, which does something else entirely. You can, however,
use @key{F1} to display a list of commands starting with @key{ESC}.
@node Mouse Input
@section Mouse Input
@cindex mouse input
By default, Emacs supports all the normal mouse actions like setting
the cursor by clicking on the left mouse button, and selecting an area
by dragging the mouse pointer. All mouse actions can be used to bind
commands in the same way you bind them to keyboard events
(@pxref{Keys}). This section provides a general overview of using the
mouse in Emacs; @pxref{Mouse Commands}, and the sections that follow
it, for more details about mouse commands in Emacs.
When you click the left mouse button, Emacs receives a
@code{mouse-1} event. To see what command is bound to that event, you
can type @kbd{C-h c} and then press the left mouse button. Similarly,
the middle mouse button is @code{mouse-2} and the right mouse button is
@code{mouse-3}. If you have a mouse with a wheel, the wheel events
are commonly bound to either @code{wheel-down} or @code{wheel-up}, or
@code{mouse-4} and @code{mouse-5}, but that depends on the operating
system configuration.
In general, legacy X systems and terminals (@pxref{Text-Only Mouse})
will report @code{mouse-4} and @code{mouse-5}, while all other systems
will report @code{wheel-down} and @code{wheel-up}.
Some mice also have a horizontal scroll wheel, and touchpads usually
support scrolling horizontally as well. These events are reported as
@code{wheel-left} and @code{wheel-right} on all systems other than
terminals and legacy X systems, where they are @code{mouse-6} and
@code{mouse-7}.
You can also combine keyboard modifiers with mouse events, so you
can bind a special command that triggers when you, for instance, holds
down the Meta key and then uses the middle mouse button. In that
case, the event name will be @code{M-mouse-2}.
@cindex touchscreen events
On some systems, you can also bind commands for handling touch
screen events. In that case, the events are called
@code{touchscreen-update} and @code{touchscreen-end}.
@node Commands
@section Keys and Commands

Some files were not shown because too many files have changed in this diff Show more