commit 79b7c7b1d39af4cac3e8599f75c582dcf76f6f3d (HEAD, refs/remotes/origin/master) Author: Roi Martin Date: Wed Sep 17 22:56:24 2025 +0200 Fix font lock and indentation in js-ts-mode Fix font lock and indentation in js-ts-mode when the tree-sitter grammar is automatically installed (Bug#79363). * lisp/progmodes/js.el (js--treesit-indent-rules) (js--treesit-font-lock-settings): Evaluate the rules only after the tree-sitter grammar is installed. (js-ts-mode): Call the new `js--treesit-indent-rules' and `js--treesit-font-lock-settings' functions. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 1e4c832254c..00c57b72e18 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3513,63 +3513,72 @@ characters of the current line." node parent bol args) js-indent-level))) -(defvar js--treesit-indent-rules - `((javascript - ((parent-is "program") parent-bol 0) - ((node-is "}") standalone-parent 0) - ((node-is ")") parent-bol 0) - ((node-is "]") parent-bol 0) - ((node-is ">") parent-bol 0) - ((and (parent-is "comment") c-ts-common-looking-at-star) - c-ts-common-comment-start-after-first-star -1) - ((parent-is "comment") prev-adaptive-prefix 0) - ((n-p-gp "identifier" "ternary_expression" "parenthesized_expression") - parent 0) - ((parent-is "ternary_expression") parent-bol js-indent-level) - ((parent-is "sequence_expression") parent 0) - ((parent-is "member_expression") js--treesit-member-chained-expression-helper 0) - ((parent-is "named_imports") parent-bol js-indent-level) - ((parent-is "statement_block") standalone-parent js-indent-level) - ((parent-is "variable_declarator") parent 0) - ((parent-is "arguments") parent-bol js-indent-level) - ((parent-is "array") parent-bol js-indent-level) - ((parent-is "formal_parameters") parent-bol js-indent-level) - ((parent-is "template_string") no-indent) ; Don't indent the string contents. - ((parent-is "template_substitution") parent-bol js-indent-level) - ((parent-is "object_pattern") parent-bol js-indent-level) - ((parent-is "object") parent-bol js-indent-level) - ((parent-is "pair") parent-bol js-indent-level) - ((parent-is "arrow_function") js--treesit-arrow-function-helper 0) - ((parent-is "parenthesized_expression") parent-bol js-indent-level) - ((parent-is "binary_expression") parent-bol js-indent-level) - ((parent-is "assignment_expression") parent-bol js-indent-level) - ((parent-is "class_body") parent-bol js-indent-level) - ;; "{" on the newline, should stay here. - ((node-is "statement_block") parent-bol 0) - ((parent-is "switch_statement") parent-bol 0) - ((parent-is "switch_body") js--treesit-switch-body-helper 0) - ((parent-is ,(rx "switch_" (or "case" "default"))) parent-bol js-indent-level) - ((match "while" "do_statement") parent-bol 0) - ((match "else" "if_statement") parent-bol 0) - ((parent-is ,(rx (or (seq (or "if" "for" "for_in" "while" "do") "_statement") - "else_clause"))) - parent-bol js-indent-level) - - ;; JSX - ,@(js-jsx--treesit-indent-compatibility-bb1f97b) - ((node-is "jsx_closing_element") parent 0) - ((match "jsx_element" "statement") parent js-indent-level) - ((parent-is "jsx_element") parent js-indent-level) - ((parent-is "jsx_text") parent-bol js-indent-level) - ((parent-is "jsx_opening_element") parent js-indent-level) - ((parent-is "jsx_expression") parent-bol js-indent-level) - ((match "/" "jsx_self_closing_element") parent 0) - ((parent-is "jsx_self_closing_element") parent js-indent-level) - ;; FIXME(Theo): This no-node catch-all should be removed. When is it needed? - (no-node parent-bol 0)) - (jsdoc - ((and (parent-is "document") c-ts-common-looking-at-star) - c-ts-common-comment-start-after-first-star -1)))) +(defvar js--treesit-indent-rules nil + "Tree-sitter indent rules for `js-ts-mode'.") + +(defun js--treesit-indent-rules () + "Return tree-sitter indent rules for `js-ts-mode'. + +Tree-sitter indent rules are evaluated the first time this function +is called. Subsequent calls return the first evaluated value." + (or js--treesit-indent-rules + (setq js--treesit-indent-rules + `((javascript + ((parent-is "program") parent-bol 0) + ((node-is "}") standalone-parent 0) + ((node-is ")") parent-bol 0) + ((node-is "]") parent-bol 0) + ((node-is ">") parent-bol 0) + ((and (parent-is "comment") c-ts-common-looking-at-star) + c-ts-common-comment-start-after-first-star -1) + ((parent-is "comment") prev-adaptive-prefix 0) + ((n-p-gp "identifier" "ternary_expression" "parenthesized_expression") + parent 0) + ((parent-is "ternary_expression") parent-bol js-indent-level) + ((parent-is "sequence_expression") parent 0) + ((parent-is "member_expression") js--treesit-member-chained-expression-helper 0) + ((parent-is "named_imports") parent-bol js-indent-level) + ((parent-is "statement_block") standalone-parent js-indent-level) + ((parent-is "variable_declarator") parent 0) + ((parent-is "arguments") parent-bol js-indent-level) + ((parent-is "array") parent-bol js-indent-level) + ((parent-is "formal_parameters") parent-bol js-indent-level) + ((parent-is "template_string") no-indent) ; Don't indent the string contents. + ((parent-is "template_substitution") parent-bol js-indent-level) + ((parent-is "object_pattern") parent-bol js-indent-level) + ((parent-is "object") parent-bol js-indent-level) + ((parent-is "pair") parent-bol js-indent-level) + ((parent-is "arrow_function") js--treesit-arrow-function-helper 0) + ((parent-is "parenthesized_expression") parent-bol js-indent-level) + ((parent-is "binary_expression") parent-bol js-indent-level) + ((parent-is "assignment_expression") parent-bol js-indent-level) + ((parent-is "class_body") parent-bol js-indent-level) + ;; "{" on the newline, should stay here. + ((node-is "statement_block") parent-bol 0) + ((parent-is "switch_statement") parent-bol 0) + ((parent-is "switch_body") js--treesit-switch-body-helper 0) + ((parent-is ,(rx "switch_" (or "case" "default"))) parent-bol js-indent-level) + ((match "while" "do_statement") parent-bol 0) + ((match "else" "if_statement") parent-bol 0) + ((parent-is ,(rx (or (seq (or "if" "for" "for_in" "while" "do") "_statement") + "else_clause"))) + parent-bol js-indent-level) + + ;; JSX + ,@(js-jsx--treesit-indent-compatibility-bb1f97b) + ((node-is "jsx_closing_element") parent 0) + ((match "jsx_element" "statement") parent js-indent-level) + ((parent-is "jsx_element") parent js-indent-level) + ((parent-is "jsx_text") parent-bol js-indent-level) + ((parent-is "jsx_opening_element") parent js-indent-level) + ((parent-is "jsx_expression") parent-bol js-indent-level) + ((match "/" "jsx_self_closing_element") parent 0) + ((parent-is "jsx_self_closing_element") parent js-indent-level) + ;; FIXME(Theo): This no-node catch-all should be removed. When is it needed? + (no-node parent-bol 0)) + (jsdoc + ((and (parent-is "document") c-ts-common-looking-at-star) + c-ts-common-comment-start-after-first-star -1)))))) (defvar js--treesit-keywords '("as" "async" "await" "break" "case" "catch" "class" "const" "continue" @@ -3586,154 +3595,162 @@ characters of the current line." "&&" "||" "!") "JavaScript operators for tree-sitter font-locking.") -(defvar js--treesit-font-lock-settings - (treesit-font-lock-rules - - :language 'javascript - :feature 'comment - '([(comment) (hash_bang_line)] @font-lock-comment-face) - - :language 'javascript - :feature 'constant - '(((identifier) @font-lock-constant-face - (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face)) - - [(true) (false) (null)] @font-lock-constant-face) - - :language 'javascript - :feature 'keyword - `([,@js--treesit-keywords] @font-lock-keyword-face - [(this) (super)] @font-lock-keyword-face) - - :language 'javascript - :feature 'string - '((regex pattern: (regex_pattern)) @font-lock-regexp-face - (string) @font-lock-string-face) - - :language 'javascript - :feature 'string-interpolation - :override t - '((template_string) @js--fontify-template-string - (template_substitution ["${" "}"] @font-lock-misc-punctuation-face)) - - :language 'javascript - :feature 'definition - `(,@(js--treesit-font-lock-compatibility-definition-feature) - - (class - name: (identifier) @font-lock-type-face) - - (class_declaration - name: (identifier) @font-lock-type-face) - - (function_declaration - name: (identifier) @font-lock-function-name-face) - - (method_definition - name: (property_identifier) @font-lock-function-name-face) - - (formal_parameters - [(identifier) @font-lock-variable-name-face - (array_pattern (identifier) @font-lock-variable-name-face) - (object_pattern (shorthand_property_identifier_pattern) @font-lock-variable-name-face)]) - - (variable_declarator - name: (identifier) @font-lock-variable-name-face) - - (variable_declarator - name: [(array_pattern (identifier) @font-lock-variable-name-face) - (object_pattern - (shorthand_property_identifier_pattern) @font-lock-variable-name-face)]) - - ;; full module imports - (import_clause (identifier) @font-lock-variable-name-face) - ;; named imports with aliasing - (import_clause (named_imports (import_specifier - alias: (identifier) @font-lock-variable-name-face))) - ;; named imports without aliasing - (import_clause (named_imports (import_specifier - !alias - name: (identifier) @font-lock-variable-name-face))) - - ;; full namespace import (* as alias) - (import_clause (namespace_import (identifier) @font-lock-variable-name-face))) - - :language 'javascript - :feature 'assignment - '((assignment_expression - left: (_) @js--treesit-fontify-assignment-lhs)) - - :language 'javascript - :feature 'function - '((call_expression - function: [(identifier) @font-lock-function-call-face - (member_expression - property: - (property_identifier) @font-lock-function-call-face)])) - - :language 'javascript - :feature 'jsx - '((jsx_opening_element name: (_) @font-lock-function-call-face) - (jsx_closing_element name: (_) @font-lock-function-call-face) - (jsx_self_closing_element name: (_) @font-lock-function-call-face) - (jsx_attribute (property_identifier) @font-lock-constant-face)) - - :language 'javascript - :feature 'property - '(((property_identifier) @font-lock-property-use-face) - (pair value: (identifier) @font-lock-variable-use-face) - ((shorthand_property_identifier) @font-lock-property-use-face)) - - :language 'javascript - :feature 'number - '((number) @font-lock-number-face - ((identifier) @font-lock-number-face - (:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face))) - - :language 'javascript - :feature 'operator - `([,@js--treesit-operators] @font-lock-operator-face - (ternary_expression ["?" ":"] @font-lock-operator-face)) - - :language 'javascript - :feature 'bracket - '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face) - - :language 'javascript - :feature 'delimiter - '((["," "." ";" ":"]) @font-lock-delimiter-face) - - :language 'javascript - :feature 'escape-sequence - :override t - '((escape_sequence) @font-lock-escape-face) - - ;; "document" should be first, to avoid overlap. - :language 'jsdoc - :override t - :feature 'document - '((document) @font-lock-doc-face) - - :language 'jsdoc - :override t - :feature 'keyword - '((tag_name) @font-lock-constant-face) - - :language 'jsdoc - :override t - :feature 'bracket - '((["{" "}"]) @font-lock-bracket-face) - - :language 'jsdoc - :override t - :feature 'property - '((type) @font-lock-type-face) - - :language 'jsdoc - :override t - :feature 'definition - '((identifier) @font-lock-variable-name-face)) - "Tree-sitter font-lock settings.") +(defvar js--treesit-font-lock-settings nil + "Tree-sitter font-lock settings for `js-ts-mode'.") + +(defun js--treesit-font-lock-settings () + "Return tree-sitter font-lock settings for `js-ts-mode'. + +Tree-sitter font-lock rules are evaluated the first time this function +is called. Subsequent calls return the first evaluated value." + (or js--treesit-font-lock-settings + (setq js--treesit-font-lock-settings + (treesit-font-lock-rules + + :language 'javascript + :feature 'comment + '([(comment) (hash_bang_line)] @font-lock-comment-face) + + :language 'javascript + :feature 'constant + '(((identifier) @font-lock-constant-face + (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face)) + + [(true) (false) (null)] @font-lock-constant-face) + + :language 'javascript + :feature 'keyword + `([,@js--treesit-keywords] @font-lock-keyword-face + [(this) (super)] @font-lock-keyword-face) + + :language 'javascript + :feature 'string + '((regex pattern: (regex_pattern)) @font-lock-regexp-face + (string) @font-lock-string-face) + + :language 'javascript + :feature 'string-interpolation + :override t + '((template_string) @js--fontify-template-string + (template_substitution ["${" "}"] @font-lock-misc-punctuation-face)) + + :language 'javascript + :feature 'definition + `(,@(js--treesit-font-lock-compatibility-definition-feature) + + (class + name: (identifier) @font-lock-type-face) + + (class_declaration + name: (identifier) @font-lock-type-face) + + (function_declaration + name: (identifier) @font-lock-function-name-face) + + (method_definition + name: (property_identifier) @font-lock-function-name-face) + + (formal_parameters + [(identifier) @font-lock-variable-name-face + (array_pattern (identifier) @font-lock-variable-name-face) + (object_pattern (shorthand_property_identifier_pattern) @font-lock-variable-name-face)]) + + (variable_declarator + name: (identifier) @font-lock-variable-name-face) + + (variable_declarator + name: [(array_pattern (identifier) @font-lock-variable-name-face) + (object_pattern + (shorthand_property_identifier_pattern) @font-lock-variable-name-face)]) + + ;; full module imports + (import_clause (identifier) @font-lock-variable-name-face) + ;; named imports with aliasing + (import_clause (named_imports (import_specifier + alias: (identifier) @font-lock-variable-name-face))) + ;; named imports without aliasing + (import_clause (named_imports (import_specifier + !alias + name: (identifier) @font-lock-variable-name-face))) + + ;; full namespace import (* as alias) + (import_clause (namespace_import (identifier) @font-lock-variable-name-face))) + + :language 'javascript + :feature 'assignment + '((assignment_expression + left: (_) @js--treesit-fontify-assignment-lhs)) + + :language 'javascript + :feature 'function + '((call_expression + function: [(identifier) @font-lock-function-call-face + (member_expression + property: + (property_identifier) @font-lock-function-call-face)])) + + :language 'javascript + :feature 'jsx + '((jsx_opening_element name: (_) @font-lock-function-call-face) + (jsx_closing_element name: (_) @font-lock-function-call-face) + (jsx_self_closing_element name: (_) @font-lock-function-call-face) + (jsx_attribute (property_identifier) @font-lock-constant-face)) + + :language 'javascript + :feature 'property + '(((property_identifier) @font-lock-property-use-face) + (pair value: (identifier) @font-lock-variable-use-face) + ((shorthand_property_identifier) @font-lock-property-use-face)) + + :language 'javascript + :feature 'number + '((number) @font-lock-number-face + ((identifier) @font-lock-number-face + (:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face))) + + :language 'javascript + :feature 'operator + `([,@js--treesit-operators] @font-lock-operator-face + (ternary_expression ["?" ":"] @font-lock-operator-face)) + + :language 'javascript + :feature 'bracket + '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face) + + :language 'javascript + :feature 'delimiter + '((["," "." ";" ":"]) @font-lock-delimiter-face) + + :language 'javascript + :feature 'escape-sequence + :override t + '((escape_sequence) @font-lock-escape-face) + + ;; "document" should be first, to avoid overlap. + :language 'jsdoc + :override t + :feature 'document + '((document) @font-lock-doc-face) + + :language 'jsdoc + :override t + :feature 'keyword + '((tag_name) @font-lock-constant-face) + + :language 'jsdoc + :override t + :feature 'bracket + '((["{" "}"]) @font-lock-bracket-face) + + :language 'jsdoc + :override t + :feature 'property + '((type) @font-lock-type-face) + + :language 'jsdoc + :override t + :feature 'definition + '((identifier) @font-lock-variable-name-face))))) (defun js--fontify-template-string (node override start end &rest _) "Fontify template string but not substitution inside it. @@ -4080,14 +4097,14 @@ See `treesit-thing-settings' for more information.") (setq-local treesit-primary-parser (treesit-parser-create 'javascript)) ;; Indent. - (setq-local treesit-simple-indent-rules js--treesit-indent-rules) + (setq-local treesit-simple-indent-rules (js--treesit-indent-rules)) ;; Navigation. (setq-local treesit-defun-type-regexp js--treesit-defun-type-regexp) (setq-local treesit-defun-name-function #'js--treesit-defun-name) (setq-local treesit-thing-settings js--treesit-thing-settings) ;; Fontification. - (setq-local treesit-font-lock-settings js--treesit-font-lock-settings) + (setq-local treesit-font-lock-settings (js--treesit-font-lock-settings)) (setq-local treesit-font-lock-feature-list js--treesit-font-lock-feature-list) (when (treesit-ensure-installed 'jsdoc) commit 3415fa15e4f0a146d1f08df981dc9894bf2ff320 Author: Paul Eggert Date: Wed Sep 17 14:26:30 2025 -0700 ; Update comment re GCC bugs 117423 and 119085. diff --git a/configure.ac b/configure.ac index 140ff76029e..55f01b9f554 100644 --- a/configure.ac +++ b/configure.ac @@ -2232,7 +2232,7 @@ AC_CACHE_CHECK([for flag to work around GCC union bugs], [/* Work around GCC bugs 117423 and 119085 re holes in unions: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117423 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119085 - These are fixed in GCC 14.4 and 15.2. + These are fixed in GCC 13.5, 14.4 and 15.2. Working around them also works around GCC bug 58416 with double in unions on x86, where the generated insns commit 29d46a2e759a7781e4c0fc5d14b8415189d83656 Author: Eric Frederickson Date: Tue Sep 16 13:05:07 2025 -0500 * doc/misc/eshell.texi (Scripts): Improve wording for 'eshell-batch-file'. diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index daaa62719a5..5d387961204 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -300,9 +300,8 @@ standard error, you can write to the Eshell virtual target @cindex batch scripts @defun eshell-batch-file -This function lets you make an Eshell script file executable from -outside of Emacs by adding it to the script's interpreter directive like -this: +You can use this function in the interpreter directive of an Eshell +script file to make the script executable from outside of Emacs: @example #!/usr/bin/env -S emacs --batch -f eshell-batch-file commit d4ee087eba4da6268634a0e64a7d6fa82e13a6ac Author: Eric Frederickson Date: Tue Sep 16 13:03:15 2025 -0500 ; * doc/misc/eshell.texi (Built-ins): Correct a typo. diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index 75a459580a9..daaa62719a5 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -607,7 +607,7 @@ ls is an alias, defined as "*ls $@@*" @group ~ $ alias compile 'apply #''compile $*' ~ $ which compile -ls is an alias, defined as "apply #'compile $*" +compile is an alias, defined as "apply #'compile $*" @end group @end example commit 25686c9a70f4ef103b1b858f4c997e79941836bb Author: Michael Albinus Date: Wed Sep 17 18:24:55 2025 +0200 * lisp/net/tramp.el (tramp-cache): Require at bottom. diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index e8f791c567b..7d315928560 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -7422,6 +7422,10 @@ If VEC is `tramp-null-hop', return local null device." (run-hooks 'tramp--startup-hook) (setq tramp--startup-hook nil) +;; Native compilation uses `expand-file-name'. This can result loading +;; "*.eln" files in an infloop, when `default-directory' is remote. +;; Prevent this. +(require 'tramp-cache) ;;; TODO: ;; commit eacaae81237d8f4e30045c663cae687473e3f327 Author: Juri Linkov Date: Wed Sep 17 19:20:18 2025 +0300 * lisp/hl-line.el: Various fixes (bug#64993). (hl-line-face): Move 'global-hl-line-overlay' updates to the loop over buffers since it's a buffer-local variable. (global-hl-line-maybe-unhighlight): Remove obsolete overlays from 'global-hl-line-overlays'. diff --git a/lisp/hl-line.el b/lisp/hl-line.el index ab9dab71823..bebccbf942d 100644 --- a/lisp/hl-line.el +++ b/lisp/hl-line.el @@ -88,9 +88,9 @@ when `global-hl-line-sticky-flag' is non-nil.") (dolist (buffer (buffer-list)) (with-current-buffer buffer (when (overlayp hl-line-overlay) - (overlay-put hl-line-overlay 'face hl-line-face)))) - (when (overlayp global-hl-line-overlay) - (overlay-put global-hl-line-overlay 'face hl-line-face)))) + (overlay-put hl-line-overlay 'face hl-line-face)) + (when (overlayp global-hl-line-overlay) + (overlay-put global-hl-line-overlay 'face hl-line-face)))))) (defcustom hl-line-sticky-flag t "Non-nil means the HL-Line mode highlight appears in all windows. @@ -310,10 +310,12 @@ on `post-command-hook'." "Maybe deactivate the Global-Hl-Line overlay on the current line. Specifically, when `global-hl-line-sticky-flag' is nil deactivate all such overlays in all buffers except the current one." + (setq global-hl-line-overlays + (seq-remove (lambda (ov) (not (overlay-buffer ov))) + global-hl-line-overlays)) (mapc (lambda (ov) (let ((ovb (overlay-buffer ov))) (when (and (not global-hl-line-sticky-flag) - (bufferp ovb) (not (eq ovb (current-buffer))) (not (minibufferp))) (with-current-buffer ovb commit de4ca2bdb1ae69a6ad0c4fc0473f2823e74f7f2b Author: Mattias Engdegård Date: Tue Sep 16 18:57:51 2025 +0200 Turn some checking macros into functions in the GC marker code This rids us of a bunch of unhygienic macros with free variables and makes the marking code actually readable again. Even better, it is all processed by the compiler even when the checks are disabled. * src/alloc.c (CHECK_ALLOCATED, CHECK_LIVE, CHECK_ALLOCATED_AND_LIVE) (CHECK_ALLOCATED_AND_LIVE_SYMBOL): Transform macros into... (check_live, check_allocated_and_live, check_allocated_and_live_symbol) (check_allocated_and_live_vectorlike): ...functions. Callers adapted. diff --git a/src/alloc.c b/src/alloc.c index 9ace6f01856..4ed76d9d368 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -120,6 +120,9 @@ along with GNU Emacs. If not, see . */ #if defined ENABLE_CHECKING && !defined GC_CHECK_MARKED_OBJECTS # define GC_CHECK_MARKED_OBJECTS 1 #endif +#ifndef GC_CHECK_MARKED_OBJECTS +# define GC_CHECK_MARKED_OBJECTS 0 +#endif /* GC_MALLOC_CHECK defined means perform validity checks of malloc'd memory. Can do this only if using gmalloc.c and if not checking @@ -6389,6 +6392,75 @@ mark_stack_push_values (Lisp_Object *values, ptrdiff_t n) .u.values = values}; } +/* When GC_CHECK_MARKED_OBJECTS is set, perform some sanity checks on + the objects marked here. Abort if we encounter an object we know is + bogus. This increases GC time by ~80%. */ + +/* Check that the object pointed to by PO is alive, using predicate + function LIVEP. */ +static inline void +check_live (bool (*livep) (struct mem_node *m, void *p), enum mem_type mtype, + void *po, struct mem_node *m) +{ + if (GC_CHECK_MARKED_OBJECTS) + { + if (pdumper_object_p (po)) + return; + if (!(m->type == mtype && livep (m, po))) + emacs_abort (); + } +} + +/* Check that the object pointed to by PO is known to be a Lisp + structure allocated from the heap, and that it is alive. */ +static inline void +check_allocated_and_live (bool (*livep) (struct mem_node *m, void *p), + enum mem_type mtype, + void *po) +{ + if (GC_CHECK_MARKED_OBJECTS) + { + if (pdumper_object_p (po)) + { + if (!pdumper_object_p_precise (po)) + emacs_abort (); + return; + } + struct mem_node *m = mem_find (po); + if (m == MEM_NIL) + emacs_abort (); + check_live (livep, mtype, po, m); + } +} + +/* Like check_allocated_and_live but for symbols. */ +static inline void +check_allocated_and_live_symbol (void *po, struct Lisp_Symbol *sym) +{ + if (GC_CHECK_MARKED_OBJECTS) + if (!c_symbol_p (sym)) + check_allocated_and_live (live_symbol_p, MEM_TYPE_SYMBOL, po); +} + +/* Like check_allocated_and_live but for vectorlike. */ +static inline void +check_allocated_and_live_vectorlike (void *po, Lisp_Object obj) +{ + if (GC_CHECK_MARKED_OBJECTS) + { + if (!pdumper_object_p (po) && !SUBRP (obj) && !main_thread_p (po)) + { + struct mem_node *m = mem_find (po); + if (m == MEM_NIL) + emacs_abort (); + if (m->type == MEM_TYPE_VECTORLIKE) + check_live (live_large_vector_p, MEM_TYPE_VECTORLIKE, po, m); + else + check_live (live_small_vector_p, MEM_TYPE_VECTOR_BLOCK, po, m); + } + } +} + /* Traverse and mark objects on the mark stack above BASE_SP. Traversal is depth-first using the mark stack for most common @@ -6397,9 +6469,6 @@ mark_stack_push_values (Lisp_Object *values, ptrdiff_t n) static void process_mark_stack (ptrdiff_t base_sp) { -#if GC_CHECK_MARKED_OBJECTS - struct mem_node *m = NULL; -#endif #if GC_CDR_COUNT ptrdiff_t cdr_count = 0; #endif @@ -6410,66 +6479,12 @@ process_mark_stack (ptrdiff_t base_sp) { Lisp_Object obj = mark_stack_pop (); mark_obj: ; + void *po = XPNTR (obj); #if GC_REMEMBER_LAST_MARKED last_marked[last_marked_index++] = obj; last_marked_index &= LAST_MARKED_SIZE - 1; #endif - /* Perform some sanity checks on the objects marked here. Abort if - we encounter an object we know is bogus. This increases GC time - by ~80%. */ -#if GC_CHECK_MARKED_OBJECTS - void *po = XPNTR (obj); - - /* Check that the object pointed to by PO is known to be a Lisp - structure allocated from the heap. */ -#define CHECK_ALLOCATED() \ - do { \ - if (pdumper_object_p (po)) \ - { \ - if (!pdumper_object_p_precise (po)) \ - emacs_abort (); \ - break; \ - } \ - m = mem_find (po); \ - if (m == MEM_NIL) \ - emacs_abort (); \ - } while (0) - - /* Check that the object pointed to by PO is live, using predicate - function LIVEP. */ -#define CHECK_LIVE(LIVEP, MEM_TYPE) \ - do { \ - if (pdumper_object_p (po)) \ - break; \ - if (! (m->type == MEM_TYPE && LIVEP (m, po))) \ - emacs_abort (); \ - } while (0) - - /* Check both of the above conditions, for non-symbols. */ -#define CHECK_ALLOCATED_AND_LIVE(LIVEP, MEM_TYPE) \ - do { \ - CHECK_ALLOCATED (); \ - CHECK_LIVE (LIVEP, MEM_TYPE); \ - } while (false) - - /* Check both of the above conditions, for symbols. */ -#define CHECK_ALLOCATED_AND_LIVE_SYMBOL() \ - do { \ - if (!c_symbol_p (ptr)) \ - { \ - CHECK_ALLOCATED (); \ - CHECK_LIVE (live_symbol_p, MEM_TYPE_SYMBOL); \ - } \ - } while (false) - -#else /* not GC_CHECK_MARKED_OBJECTS */ - -#define CHECK_ALLOCATED_AND_LIVE(LIVEP, MEM_TYPE) ((void) 0) -#define CHECK_ALLOCATED_AND_LIVE_SYMBOL() ((void) 0) - -#endif /* not GC_CHECK_MARKED_OBJECTS */ - switch (XTYPE (obj)) { case Lisp_String: @@ -6477,7 +6492,7 @@ process_mark_stack (ptrdiff_t base_sp) register struct Lisp_String *ptr = XSTRING (obj); if (string_marked_p (ptr)) break; - CHECK_ALLOCATED_AND_LIVE (live_string_p, MEM_TYPE_STRING); + check_allocated_and_live (live_string_p, MEM_TYPE_STRING, po); set_string_marked (ptr); mark_interval_tree (ptr->u.s.intervals); #ifdef GC_CHECK_STRING_BYTES @@ -6498,18 +6513,7 @@ process_mark_stack (ptrdiff_t base_sp) enum pvec_type pvectype = PSEUDOVECTOR_TYPE (ptr); -#ifdef GC_CHECK_MARKED_OBJECTS - if (!pdumper_object_p (po) && !SUBRP (obj) && !main_thread_p (po)) - { - m = mem_find (po); - if (m == MEM_NIL) - emacs_abort (); - if (m->type == MEM_TYPE_VECTORLIKE) - CHECK_LIVE (live_large_vector_p, MEM_TYPE_VECTORLIKE); - else - CHECK_LIVE (live_small_vector_p, MEM_TYPE_VECTOR_BLOCK); - } -#endif + check_allocated_and_live_vectorlike (po, obj); switch (pvectype) { @@ -6612,7 +6616,7 @@ process_mark_stack (ptrdiff_t base_sp) nextsym: if (symbol_marked_p (ptr)) break; - CHECK_ALLOCATED_AND_LIVE_SYMBOL (); + check_allocated_and_live_symbol (po, ptr); set_symbol_marked (ptr); /* Attempt to catch bogus objects. */ eassert (valid_lisp_object_p (ptr->u.s.function)); @@ -6657,9 +6661,8 @@ process_mark_stack (ptrdiff_t base_sp) mark_interval_tree (string_intervals (ptr->u.s.name)); /* Inner loop to mark next symbol in this bucket, if any. */ ptr = ptr->u.s.next; -#if GC_CHECK_MARKED_OBJECTS - po = ptr; -#endif + if (GC_CHECK_MARKED_OBJECTS) + po = ptr; if (ptr) goto nextsym; } @@ -6670,7 +6673,7 @@ process_mark_stack (ptrdiff_t base_sp) struct Lisp_Cons *ptr = XCONS (obj); if (cons_marked_p (ptr)) break; - CHECK_ALLOCATED_AND_LIVE (live_cons_p, MEM_TYPE_CONS); + check_allocated_and_live (live_cons_p, MEM_TYPE_CONS, po); set_cons_marked (ptr); /* Avoid growing the stack if the cdr is nil. In any case, make sure the car is expanded first. */ @@ -6693,7 +6696,7 @@ process_mark_stack (ptrdiff_t base_sp) struct Lisp_Float *f = XFLOAT (obj); if (!f) break; /* for HASH_UNUSED_ENTRY_KEY */ - CHECK_ALLOCATED_AND_LIVE (live_float_p, MEM_TYPE_FLOAT); + check_allocated_and_live (live_float_p, MEM_TYPE_FLOAT, po); /* Do not mark floats stored in a dump image: these floats are "cold" and do not have mark bits. */ if (pdumper_object_p (f)) @@ -6711,10 +6714,6 @@ process_mark_stack (ptrdiff_t base_sp) emacs_abort (); } } - -#undef CHECK_LIVE -#undef CHECK_ALLOCATED -#undef CHECK_ALLOCATED_AND_LIVE } void commit 08b2d53e48fc8f8081bfa5fe5465dc99dbb7407d Author: Mattias Engdegård Date: Mon Sep 15 21:35:12 2025 +0200 ; * src/lisp.h (enum handlertype): Comment accuracy. diff --git a/src/lisp.h b/src/lisp.h index fe942c917f0..1782b12e7fd 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3825,7 +3825,7 @@ enum handlertype { CONDITION_CASE, /* Entry for 'condition-case'. 'tag_or_ch' holds the list of conditions. 'val' holds the retval during longjmp. */ - CATCHER_ALL, /* Wildcard which catches all 'throw's. + CATCHER_ALL, /* Wildcard that catches all throws and signals. 'tag_or_ch' is unused. 'val' holds the retval during longjmp. */ HANDLER_BIND, /* Entry for 'handler-bind'. commit 2135e7aa0169639083996fb2a3f82792cdd7a9c0 Author: Jostein Kjønigsen Date: Wed Aug 27 11:05:28 2025 +0200 Fixes for csharp-ts-mode fontification (bug#79406) - hightlight reserved keywords agressively, dont allow misuse as variables etc (the compiler will fail!) - highlight lambda-valued variables as funtions. - improve semantics of function/class annotations using attributes (maps closer to using-something than declaring it). also: rename to "attribute". "property" has a different, defined meaning in C#. - better highlight variable-use in different scenarios (function-calls, if-statements, assignment-expressions, property-use, anonymous object initializers). - better highlight for property-use (anonymous object initializers). - highlight field-declaration using font-lock-variable-face. - fontify attributes using new face csharp-ts-mode-attribute-face (defaults to font-lock-property-use-face). - remove extensive use of "override" making evalutation hard-to-reason about. * lisp/progmodes/csharp-mode.el (csharp-ts-mode--indent-rules): Update indent rules. (csharp-ts-mode-faces): New group. (csharp-ts-mode-attribute-face): New face. (csharp-ts-mode--font-lock-settings): Rule updates. (csharp-ts-mode): Change property feature to attribute diff --git a/etc/NEWS b/etc/NEWS index 1a54de9de2e..1d8e85f7d1a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -972,6 +972,12 @@ are highlighted like other comments. When non-nil, Doxygen comment blocks are syntax-highlighted if the Doxygen grammar library is available. +** Csharp-ts-mode + +*** Renamed feature in 'treesit-font-lock-feature-list' +The feature 'property' has been renamed to 'attribute', since this is +what it is called in the general C# community. + ** Go-ts mode +++ diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index 0c44fff18bf..d8b20e1f6f0 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -673,7 +673,7 @@ compilation and evaluation time conflicts." ((parent-is "namespace_declaration") parent-bol 0) ((parent-is "class_declaration") parent-bol 0) ((parent-is "constructor_declaration") parent-bol 0) - ((parent-is "array_creation_expression") parent-bol 0) ;; actual initialization is in contained initializer_expression + ((parent-is "array_creation_expression") parent-bol 0) ;; actual initialization is in contained initializer_expression. ((match "{" "initializer_expression" ) parent-bol 0) ((parent-is "initializer_expression") parent-bol csharp-ts-mode-indent-offset) ((match "{" "anonymous_object_creation_expression") parent-bol 0) @@ -735,6 +735,15 @@ compilation and evaluation time conflicts." "readonly" "unmanaged") "C# keywords for tree-sitter font-locking.") +(defgroup csharp-ts-mode-faces nil + "Font faces." + :group 'cshap) + +(defface csharp-ts-mode-attribute-face + '((t . (:inherit font-lock-property-use-face))) + "Font face used for fontification of attributes." + :group 'csharp-ts-mode-faces) + (defun csharp-ts-mode--test-this-expression () "Return non-nil if (this_expression) is named in csharp grammar." (treesit-query-valid-p 'c-sharp "(this_expression)")) @@ -782,6 +791,18 @@ compilation and evaluation time conflicts." '((conditional_expression (identifier) @font-lock-variable-use-face) (postfix_unary_expression (identifier)* @font-lock-variable-use-face) (initializer_expression (assignment_expression left: (identifier) @font-lock-property-use-face)) + (anonymous_object_creation_expression + (identifier) @font-lock-property-use-face + (identifier) @font-lock-variable-use-face) + (anonymous_object_creation_expression + (identifier) @font-lock-property-use-face + [(object_creation_expression) + (integer_literal) + (string_literal) + (binary_expression) + (invocation_expression) + (member_access_expression) + (conditional_expression)]) (interpolated_string_expression (interpolation (identifier) @font-lock-variable-use-face)) @@ -823,7 +844,24 @@ compilation and evaluation time conflicts." (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) ((binary_expression right: (identifier) @font-lock-variable-use-face) - (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face))) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + (assignment_expression + right: (identifier) @font-lock-variable-use-face) + (expression_statement ;; capture parent node to NOT shadow variable_declaration. + (assignment_expression + left: (identifier) @font-lock-variable-use-face)) + (if_statement condition: (identifier) @font-lock-variable-use-face) + + ;; handle more specific matchers before generalized variable-use fallback. + (invocation_expression + function: (member_access_expression + name: (identifier) @font-lock-function-call-face)) + (invocation_expression + function: (member_access_expression + name: (generic_name (identifier) @font-lock-function-call-face))) + (member_access_expression + expression: (identifier) @font-lock-variable-use-face + name: (identifier) @font-lock-property-use-face)) :language 'c-sharp :feature 'bracket @@ -849,13 +887,19 @@ compilation and evaluation time conflicts." (modifier) @font-lock-keyword-face ,@(if (csharp-ts-mode--test-this-expression) '((this_expression) @font-lock-keyword-face) - '("this" @font-lock-keyword-face))) + '("this" @font-lock-keyword-face)) + + ;; avoid fontifying indentifiers with a keyword-values as identifiers. + ((identifier) @font-lock-keyword-face + (:match ,(concat "\\`" (regexp-opt csharp-ts-mode--keywords t) "\\'") @font-lock-keyword-face))) :language 'c-sharp :override t - :feature 'property - `((attribute (identifier) @font-lock-property-use-face (attribute_argument_list)) - (attribute (identifier) @font-lock-property-use-face)) + :feature 'attribute + `((attribute_list + "[" @csharp-ts-mode-attribute-face + (attribute name: (identifier) @csharp-ts-mode-attribute-face) + "]" @csharp-ts-mode-attribute-face)) :language 'c-sharp :override t @@ -890,7 +934,6 @@ compilation and evaluation time conflicts." @font-lock-string-face) :language 'c-sharp - :override t :feature 'type `((predefined_type) @font-lock-type-face (implicit_type) @font-lock-type-face @@ -935,7 +978,6 @@ compilation and evaluation time conflicts." :language 'c-sharp :feature 'definition - :override t `((qualified_name (identifier) @font-lock-type-face) (using_directive (identifier) @font-lock-type-face) ,@(when (csharp-ts-mode--test-name-equals) @@ -944,6 +986,8 @@ compilation and evaluation time conflicts." (enum_declaration (identifier) @font-lock-type-face) (enum_member_declaration (identifier) @font-lock-variable-name-face) + (field_declaration (variable_declaration (variable_declarator + name: (identifier) @font-lock-variable-name-face))) (interface_declaration (identifier) @font-lock-type-face) @@ -974,6 +1018,18 @@ compilation and evaluation time conflicts." (method_declaration ,csharp-ts-mode--type-field (generic_name (identifier) @font-lock-type-face)) (method_declaration name: (_) @font-lock-function-name-face) + ;; only fontify known expression-types, to avoid the need to use :override + ;; for lambda-expressions in 'function below. + (variable_declarator + name: (identifier) @font-lock-variable-name-face + [(object_creation_expression) + (integer_literal) + (string_literal) + (binary_expression) + (invocation_expression) + (member_access_expression) + (conditional_expression)]) + (catch_declaration ((identifier) @font-lock-type-face)) (catch_declaration @@ -984,7 +1040,6 @@ compilation and evaluation time conflicts." (variable_declaration (qualified_name name: (generic_name (identifier) @font-lock-type-face))) (variable_declaration (generic_name (identifier) @font-lock-type-face)) - (variable_declarator (identifier) @font-lock-variable-name-face) (parameter type: (identifier) @font-lock-type-face) (parameter type: (generic_name (identifier) @font-lock-type-face)) @@ -1001,14 +1056,6 @@ compilation and evaluation time conflicts." :feature 'function '((invocation_expression function: (identifier) @font-lock-function-call-face) - (invocation_expression - function: (member_access_expression - name: (identifier) @font-lock-function-call-face)) - (invocation_expression - function: (member_access_expression - name: (generic_name (identifier) @font-lock-function-call-face))) - (invocation_expression - function: (generic_name (identifier) @font-lock-function-call-face)) ((invocation_expression function: (member_access_expression expression: (identifier) @font-lock-variable-use-face)) @@ -1018,7 +1065,11 @@ compilation and evaluation time conflicts." expression: (identifier) @font-lock-variable-use-face)) (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) (argument (member_access_expression - name: (identifier) @font-lock-property-use-face))) + name: (identifier) @font-lock-property-use-face)) + ;; only highlight as function if variable contains lambda expression + (variable_declarator + name: (identifier) @font-lock-function-name-face + (lambda_expression))) :language 'c-sharp :feature 'escape-sequence @@ -1198,7 +1249,7 @@ Key bindings: (setq-local treesit-font-lock-feature-list '(( comment definition) ( keyword string type directives) - ( constant escape-sequence expression literal property) + ( constant escape-sequence expression literal attribute) ( function bracket delimiter error))) ;; Imenu. commit 32d959e48becc240a6630e294472b4b4218df807 Author: Juri Linkov Date: Tue Sep 16 20:50:10 2025 +0300 New mode 'mouse-shift-adjust-mode' for S- * lisp/mouse.el (mouse-shift-adjust-mode-map): New variable. (mouse-shift-adjust-mode): New minor mode (bug#79453). (mouse-shift-adjust-point): New variable. (mouse-drag-region-shift-adjust): New command. (mouse-drag-track, mouse-set-region): Use 'mouse-shift-adjust-point' to take into account the already existing region boundary. diff --git a/etc/NEWS b/etc/NEWS index 469d180057a..1a54de9de2e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -255,8 +255,12 @@ but as a plain Lisp variable, not a user option.) ** Mouse +*** New mode 'mouse-shift-adjust-mode' extends selection with 'S-'. +When enabled, you can use the left mouse button with the modifier +to extend the boundaries of the active region by dragging the mouse pointer. + --- -*** 'context-menu-mode now' includes a "Send to..." menu item. +*** 'context-menu-mode' now includes a "Send to..." menu item. The menu item enables sending current file(s) or region text to external (non-Emacs) applications or services. See send-to.el for customisations. diff --git a/lisp/mouse.el b/lisp/mouse.el index b8d46d8dbed..b8db801b422 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -737,6 +737,25 @@ This is the keyboard interface to \\[context-menu-map]." (push-mark) (insert string)) + +;; Mouse shift adjustment mode. + +(defvar mouse-shift-adjust-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [S-down-mouse-1] #'mouse-drag-region-shift-adjust) + (define-key map [S-mouse-1] #'mouse-set-region) + (define-key map [S-drag-mouse-1] #'mouse-set-region) + map) + "Mouse shift adjustment mode map.") + +(define-minor-mode mouse-shift-adjust-mode + "Toggle mouse shift adjustment mode. + +When this mode is enabled, clicking the left mouse button +with the modifier (`S-down-mouse-1') adjusts the +already selected region using `mouse-drag-region-shift-adjust'." + :global t) + ;; Commands that operate on windows. @@ -1520,6 +1539,8 @@ point determined by `mouse-select-region-move-to-beginning'." (eq mouse-last-region-end (region-end)) (eq mouse-last-region-tick (buffer-modified-tick)))) +(defvar mouse-shift-adjust-point nil) + (defun mouse-set-region (click) "Set the region to the text dragged over, and copy to kill ring. This should be bound to a mouse drag event. @@ -1528,7 +1549,7 @@ command alters the kill ring or not." (interactive "e") (mouse-minibuffer-check click) (select-window (posn-window (event-start click))) - (let ((beg (posn-point (event-start click))) + (let ((beg (or mouse-shift-adjust-point (posn-point (event-start click)))) (end (if (eq (posn-window (event-end click)) (selected-window)) (posn-point (event-end click)) @@ -1537,7 +1558,7 @@ command alters the kill ring or not." (window-point))) (click-count (event-click-count click))) (let ((drag-start (terminal-parameter nil 'mouse-drag-start))) - (when drag-start + (when (and drag-start (not mouse-shift-adjust-point)) ;; Drag events don't come with a click count, sadly, so we hack ;; our way around this problem by remembering the start-event in ;; `mouse-drag-start' and fetching the click-count from there. @@ -1552,6 +1573,9 @@ command alters the kill ring or not." (not (eq (car drag-start) 'mouse-movement))) (setq end beg)) (setf (terminal-parameter nil 'mouse-drag-start) nil))) + (when mouse-shift-adjust-point + (setq click-count (1+ mouse-selection-click-count))) + (setq mouse-shift-adjust-point nil) (when (and (integerp beg) (integerp end)) (let ((range (mouse-start-end beg end (1- click-count)))) (if (< end beg) @@ -1672,11 +1696,22 @@ is dragged over to." (ignore-preserving-kill-region) (mouse-drag-track start-event))) +(defun mouse-drag-region-shift-adjust (start-event) + "Adjust the already active region while dragging the mouse." + (interactive "e") + ;; Give temporary modes such as isearch a chance to turn off. + (run-hooks 'mouse-leave-buffer-hook) + (ignore-preserving-kill-region) + (setq mouse-shift-adjust-point + (or (and (region-active-p) (mark t)) (point))) + (mouse-drag-track start-event)) + ;; Inhibit the region-confinement when undoing mouse-drag-region ;; immediately after the command. Otherwise, the selection left ;; active around the dragged text would prevent an undo of the whole ;; operation. (put 'mouse-drag-region 'undo-inhibit-region t) +(put 'mouse-drag-region-shift-adjust 'undo-inhibit-region t) (defvar mouse-event-areas-with-no-buffer-positions '( mode-line header-line vertical-line @@ -1838,6 +1873,9 @@ The region will be defined with mark and point." (setq scroll-margin scroll-margin-saved)))) (condition-case err (progn + ;; Use previous click-count while adjusting previous selection. + (when mouse-shift-adjust-point + (setq click-count mouse-selection-click-count)) (setq mouse-selection-click-count click-count) ;; Suppress automatic scrolling near the edges while tracking @@ -1859,9 +1897,17 @@ The region will be defined with mark and point." (if (eq transient-mark-mode 'lambda) '(only) (cons 'only transient-mark-mode))) - (let ((range (mouse-start-end start-point start-point click-count))) - (push-mark (nth 0 range) t t) - (goto-char (nth 1 range))) + (let ((range (mouse-start-end + (or mouse-shift-adjust-point start-point) + start-point click-count))) + (cond + ((and mouse-shift-adjust-point + (> mouse-shift-adjust-point start-point)) + (push-mark (nth 1 range) t t) + (goto-char (nth 0 range))) + (t + (push-mark (nth 0 range) t t) + (goto-char (nth 1 range))))) (setf (terminal-parameter nil 'mouse-drag-start) start-event) ;; Set 'track-mouse' to something neither nil nor t, so that mouse @@ -1884,8 +1930,9 @@ The region will be defined with mark and point." (setcar start-event 'mouse-movement)) (if (and (eq (posn-window end) start-window) (integer-or-marker-p end-point)) - (mouse--drag-set-mark-and-point start-point - end-point click-count) + (mouse--drag-set-mark-and-point + (or mouse-shift-adjust-point start-point) + end-point click-count) (let ((mouse-row (cdr (cdr (mouse-position))))) (cond ((null mouse-row)) commit 503351e5299e3b68e21e1c07925accb6113f8ecb Author: Juri Linkov Date: Tue Sep 16 20:15:14 2025 +0300 * lisp/hl-line.el (global-hl-line-sticky-flag): New value 'all'. (global-hl-line-mode): Use 'global-hl-line-highlight-all' for 'post-command-hook' when the value of 'global-hl-line-sticky-flag' is 'all' (bug#64993). diff --git a/etc/NEWS b/etc/NEWS index 62755a433cc..469d180057a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2532,6 +2532,12 @@ This specifies in which major modes should the 'global-hl-line-mode' be switched on. The default is t, which means enable it in all major modes. +--- +*** New value 'all' for the user option 'global-hl-line-sticky-flag'. +It updates the line highlighting in all windows and buffers, +unlike the value t that updates only windows that display +the current buffer. + --- *** New user option 'display-fill-column-indicator-warning'. Customize it to a non-nil value to have the fill-column indicators diff --git a/lisp/hl-line.el b/lisp/hl-line.el index 2c80ce0c1ca..ab9dab71823 100644 --- a/lisp/hl-line.el +++ b/lisp/hl-line.el @@ -116,9 +116,22 @@ For that, use `global-hl-line-sticky-flag'." (defcustom global-hl-line-sticky-flag nil "Non-nil means the Global HL-Line mode highlight appears in all windows. Otherwise Global Hl-Line mode will highlight only in the selected -window. Setting this variable takes effect the next time you use +window. + +The value t affects only the case when the current buffer is displayed +in several windows - then the current line of the selected window +is indicated in non-selected windows. + +If the value is `all', the Global HL-Line mode affects all windows. +This means that even when point moves in a non-selected window +that displays another buffer, the new position will be updated +to highlight the current line of other buffers. + +Setting this variable takes effect the next time you use the command `global-hl-line-mode' to turn Global Hl-Line mode on." - :type 'boolean + :type '(choice (const :tag "Disable" nil) + (const :tag "Enable for buffer in multiple windows" t) + (const :tag "Enable and update in all windows" all)) :version "24.1" :group 'hl-line) @@ -256,9 +269,12 @@ on `post-command-hook'." ;; In case `kill-all-local-variables' is called. (add-hook 'change-major-mode-hook #'global-hl-line-unhighlight) (global-hl-line-highlight-all) - (add-hook 'post-command-hook #'global-hl-line-highlight)) + (add-hook 'post-command-hook (if (eq global-hl-line-sticky-flag 'all) + #'global-hl-line-highlight-all + #'global-hl-line-highlight))) (global-hl-line-unhighlight-all) (remove-hook 'post-command-hook #'global-hl-line-highlight) + (remove-hook 'post-command-hook #'global-hl-line-highlight-all) (remove-hook 'change-major-mode-hook #'global-hl-line-unhighlight))) (defun global-hl-line-highlight () commit bd194c9a572bae0e13468c8dbca63d5a64af192a Author: Juri Linkov Date: Tue Sep 16 19:48:43 2025 +0300 Context menu related fixes (bug#64980) * etc/PROBLEMS: Suggest how to keep context menus open on Lucid. * lisp/mouse.el (context-menu-mode-map): Bind [mouse-3] to 'ignore' instead of 'nil' to not fallback to the default binding. (mouse--drag-start-event): Remove unused variable. (mouse-undouble-last-event): Remove unused function. diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 5da83fefeb1..be023b3d5ce 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -2012,6 +2012,15 @@ Very long popup menus cannot be shown in their entirety, and don't have a scroll bar to scroll them vertically. Lucid does not support this feature. A workaround is to use other toolkits (GTK, LessTif, etc.). +*** In Emacs built with Lucid cannot keep context menus open. + +After enabling context-menu-mode, when the menu is opened by +, it closes right away when the right mouse button +is released. It's possible to keep the context menu open +after releasing the mouse button by disabling XInput 2 support: + + ./configure --with-x-toolkit=lucid --without-xinput2 + *** Emacs running under X Window System does not handle mouse clicks. *** 'emacs -geometry 80x20' finds a file named '80x20'. diff --git a/lisp/mouse.el b/lisp/mouse.el index 907a4883230..b8d46d8dbed 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -687,7 +687,7 @@ Some context functions add menu items below the separator." (defvar context-menu-mode-map (let ((map (make-sparse-keymap))) - (define-key map [mouse-3] nil) + (define-key map [mouse-3] #'ignore) (define-key map [down-mouse-3] context-menu-entry) (define-key map [menu] #'context-menu-open) (if (featurep 'w32) @@ -1520,8 +1520,6 @@ point determined by `mouse-select-region-move-to-beginning'." (eq mouse-last-region-end (region-end)) (eq mouse-last-region-tick (buffer-modified-tick)))) -(defvar mouse--drag-start-event nil) - (defun mouse-set-region (click) "Set the region to the text dragged over, and copy to kill ring. This should be bound to a mouse drag event. @@ -2064,27 +2062,6 @@ If MODE is 2 then do the same for lines." (if (numberp (posn-point posn)) (push-mark (posn-point posn) t t)))) -(defun mouse-undouble-last-event (events) - (let* ((index (1- (length events))) - (last (nthcdr index events)) - (event (car last)) - (basic (event-basic-type event)) - (old-modifiers (event-modifiers event)) - (modifiers (delq 'double (delq 'triple (copy-sequence old-modifiers)))) - (new - (if (consp event) - ;; Use reverse, not nreverse, since event-modifiers - ;; does not copy the list it returns. - (cons (event-convert-list (reverse (cons basic modifiers))) - (cdr event)) - event))) - (setcar last new) - (if (and (not (equal modifiers old-modifiers)) - (key-binding (apply #'vector events))) - t - (setcar last event) - nil))) - ;; Momentarily show where the mark is, if highlighting doesn't show it. (defun mouse-set-mark (click) commit e568f44b54f5d265d540eb72d116dcb64394e087 Author: Eli Zaretskii Date: Tue Sep 16 19:24:18 2025 +0300 ; Improve recently-added documentation * etc/NEWS: * lisp/vc/vc.el (vc-apply-root-to-other-working-tree): * doc/emacs/vc1-xtra.texi (Other Working Trees): Fix spelling and wording of documentation of recent changes to VC. diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi index 15b7a73e5d7..1a7d65937c0 100644 --- a/doc/emacs/vc1-xtra.texi +++ b/doc/emacs/vc1-xtra.texi @@ -400,7 +400,7 @@ branch there. You apply the patch to that working tree using @w{@kbd{C-x v w a}} (see below), build and test it. Satisfied, you use @w{@kbd{C-x v P}} (@pxref{Pulling / Pushing}) in the other working tree. In the course of -testing the patch, you've realised that the bug exists in version 3 of +testing the patch, you've realized that the bug exists in version 3 of the software, too. So you switch back to your first working tree, and use @kbd{C-x v m} (@pxref{Merging}) to merge the branch you have checked out in the other working tree. Now your version of the trunk has all of @@ -509,13 +509,14 @@ working tree as a whole, independent project. @kindex C-x v w a @findex vc-apply-to-other-working-tree The command @kbd{C-x v w a} (@code{vc-apply-to-other-working-tree}) -prompts you to select a working tree, then copies changes from the +prompts you to select another working tree, then copies changes from the current working tree to that other working tree. With a prefix argument, it moves changes instead of just copying them. Usually the command operates on local (uncommitted) changes to the current VC -fileset. When invoked in a Diff mode (@pxref{Diff Mode}) buffer, it +fileset. When invoked in a buffer under Diff mode (@pxref{Diff Mode}), it operates on the changes specified by the contents of that buffer. The -command stops and does nothing if any of the changes don't apply. +command stops and does nothing if any of the changes don't apply to the +target working tree. @kbd{C-x v w a} is useful to copy changes to a temporary working tree in order to test them. It is also useful to copy fixes back to your main diff --git a/etc/NEWS b/etc/NEWS index 736874c1a0a..62755a433cc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2077,6 +2077,10 @@ other working trees: - 'C-x v w x': Delete a working tree you no longer need. - 'C-x v w R': Relocate a working tree to another file name. +The new user option 'vc-no-confirm-moving-changes' controls whether +'C-x v w a' and 'C-x v w A' ask for confirmation when moving changes +between working trees. The default is to ask for confirmation. + In addition, Lisp programs that extend VC can invoke the new backend functions to obtain a list of other working trees, and to add, remove and relocate them. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 07b9ea8b951..ce950b18caf 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -4701,7 +4701,7 @@ tree, it is an error, and no changes are moved." ;;;###autoload (defun vc-apply-root-to-other-working-tree (directory &optional move preview) - "Apply all local changes to this working tree to the one under DIRECTORY. + "Apply all local changes in this working tree to the tree under DIRECTORY. Must be called from within an existing VC working tree. When called interactively, prompts for DIRECTORY. With a prefix argument (when called from Lisp, with optional argument commit 2c7b08d417e10ca3512c0d6bebc853955e08c94b Author: Stefan Monnier Date: Tue Sep 16 10:50:14 2025 -0400 Revert "Fix generation of defvars defined by easy-mmode and company in loaddefs.el" This reverts commit e9800cabffa73018a83108de2bb4e1686f1e8385. AFAICT that commit had no effect but it re-introduces some magic constants in the code that we'd like to eliminate. We presume it was a misunderstanding, trying to fix a transient problem which a bootstrap would have fixed. See https://lists.gnu.org/archive/html/emacs-devel/2025-08/msg00716.html and https://lists.gnu.org/archive/html/emacs-devel/2025-09/msg00109.html diff --git a/lisp/emacs-lisp/loaddefs-gen.el b/lisp/emacs-lisp/loaddefs-gen.el index 9e91a11204d..c8e05921fc1 100644 --- a/lisp/emacs-lisp/loaddefs-gen.el +++ b/lisp/emacs-lisp/loaddefs-gen.el @@ -244,25 +244,7 @@ expand)' among their `declare' forms." (setq expand (let ((load-true-file-name file) (load-file-name file)) (macroexpand form))) - (or (and - ;; Previously, macros defined in this list would not - ;; see their expansions processed in place of - ;; themselves if such an expansion did not yield a - ;; `progn', `prog1' or `defalias' form. Not - ;; reproducing these conditions results in the - ;; omission of minor mode variables and suchlike in - ;; loaddefs.el when only the defuns in the - ;; macroexpansions are autoloaded. - (not (memq car '( define-globalized-minor-mode defun defmacro - define-minor-mode define-inline - cl-defun cl-defmacro cl-defgeneric - cl-defstruct pcase-defmacro iter-defun cl-iter-defun - ;; Obsolete; keep until the alias is removed. - easy-mmode-define-global-mode - easy-mmode-define-minor-mode - define-global-minor-mode))) - (not (eq car (car expand)))) - (memq (car expand) '(progn prog1 defalias))))) + (not (eq car (car expand))))) ;; Recurse on the expansion. (loaddefs-generate--make-autoload expand file 'expansion)) commit 208e80018a7cdc87b35c7f8a08a243600c54c9cc Author: Sean Whitton Date: Thu Sep 4 11:25:25 2025 +0100 New commands to apply changes to other working trees * lisp/vc/diff-mode.el (diff-apply-buffer): New TEST argument. * lisp/vc/vc.el (diff-apply-buffer): Declare. (vc-no-confirm-moving-changes): New user option. (vc-apply-to-other-working-tree) (vc-apply-root-to-other-working-tree): New commands. * lisp/vc/vc-hooks.el (vc-prefix-map): Bind them. * doc/emacs/vc1-xtra.texi (Other Working Trees): * etc/NEWS: Document them. diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi index b5a0f0c129b..15b7a73e5d7 100644 --- a/doc/emacs/vc1-xtra.texi +++ b/doc/emacs/vc1-xtra.texi @@ -397,15 +397,15 @@ want to disturb. So you type @kbd{C-x v w c} (see below) and create a new working tree, following the prompts to check out the version 2 branch there. -You apply the patch to that working tree, build and test it. Satisfied, -you use @kbd{C-x v P} (@pxref{Pulling / Pushing}) in the other working -tree. In the course of testing the patch, you've realised that the bug -exists in version 3 of the software, too. So you switch back to your -first working tree, and use @kbd{C-x v m} (@pxref{Merging}) to merge the -branch you have checked out in the other working tree. Now your version -of the trunk has all of version 2's fixes merged into it, but you -haven't pushed it yet because you're still refactoring. You'll use -@kbd{C-x v P} later. +You apply the patch to that working tree using @w{@kbd{C-x v w a}} (see +below), build and test it. Satisfied, you use @w{@kbd{C-x v P}} +(@pxref{Pulling / Pushing}) in the other working tree. In the course of +testing the patch, you've realised that the bug exists in version 3 of +the software, too. So you switch back to your first working tree, and +use @kbd{C-x v m} (@pxref{Merging}) to merge the branch you have checked +out in the other working tree. Now your version of the trunk has all of +version 2's fixes merged into it, but you haven't pushed it yet because +you're still refactoring. You'll use @kbd{C-x v P} later. @end indentedblock Ordinary VC commands like @kbd{C-x v v} (@pxref{Basic VC Editing}) and @@ -440,6 +440,12 @@ Visit this file or directory in another working tree. Invoke @kbd{C-x p p} (@code{project-switch-project}) but limited to other working trees. +@item C-x v w a +Copy or move fileset changes to another working tree. + +@item C-x v w A +Copy or move all changes to another working tree. + @item C-x v w x Delete a working tree you no longer need. @@ -500,6 +506,34 @@ to other working trees. The main difference between @kbd{C-x v w w} and buffer in the other working tree while the latter considers the other working tree as a whole, independent project. +@kindex C-x v w a +@findex vc-apply-to-other-working-tree +The command @kbd{C-x v w a} (@code{vc-apply-to-other-working-tree}) +prompts you to select a working tree, then copies changes from the +current working tree to that other working tree. With a prefix +argument, it moves changes instead of just copying them. Usually the +command operates on local (uncommitted) changes to the current VC +fileset. When invoked in a Diff mode (@pxref{Diff Mode}) buffer, it +operates on the changes specified by the contents of that buffer. The +command stops and does nothing if any of the changes don't apply. + +@kbd{C-x v w a} is useful to copy changes to a temporary working tree in +order to test them. It is also useful to copy fixes back to your main +working tree for checking in. For example, you might hack away at a bug +in a temporary working tree, and fix it. You'd then want to copy or +move the fix back to your main working tree to check it in and push it. + +@kindex C-x v w A +@findex vc-apply-root-to-other-working-tree +The command @kbd{C-x v w A} works similarly, except that it always +copies or moves all local changes to the whole working tree, not just +changes to the current VC fileset or changes represented by the contents +of a Diff mode buffer. With two prefix arguments, this command shows a +preview of changes to be copied, leaving you to apply them using +standard Diff mode commands like @kbd{C-c C-a} and @w{@kbd{C-c a}} +(@pxref{Diff Mode}). (@w{@kbd{C-u C-u C-x v w A}} is roughly equivalent +to typing @w{@kbd{C-x v D}} followed by @w{@kbd{C-x v w w}}.) + @kindex C-x v w x @kindex C-x v w R @findex vc-delete-working-tree diff --git a/etc/NEWS b/etc/NEWS index 27e3f1e4ce0..736874c1a0a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2072,6 +2072,8 @@ other working trees: - 'C-x v w c': Add a new working tree. - 'C-x v w w': Visit this file in another working tree. - 'C-x v w s': Like 'C-x p p' but limited to other working trees. +- 'C-x v w a': Copy or move fileset changes to another working tree. +- 'C-x v w A': Copy or move all changes to another working tree. - 'C-x v w x': Delete a working tree you no longer need. - 'C-x v w R': Relocate a working tree to another file name. diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index c58ad67ff52..f207f87811c 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -2213,17 +2213,21 @@ customize `diff-ask-before-revert-and-kill-hunk' to control that." (when (null (diff-apply-buffer beg end t)) (diff-hunk-kill))))) -(defun diff-apply-buffer (&optional beg end reverse) +(defun diff-apply-buffer (&optional beg end reverse test) "Apply the diff in the entire diff buffer. Interactively, if the region is active, apply all hunks that the region overlaps; otherwise, apply all hunks. With a prefix argument, reverse-apply the hunks. If applying all hunks succeeds, save the changed buffers. -When called from Lisp with optional arguments, restrict the application -to hunks lying between BEG and END, and reverse-apply them when REVERSE -is non-nil. Returns nil if buffers were successfully modified and -saved, or the number of failed hunk applications otherwise." +When called from Lisp, returns nil if buffers were successfully modified +and saved, or the number of failed hunk applications otherwise. +Optional arguments BEG and END restrict the hunks to be applied to those +lying between BEG and END. +Optional argument REVERSE means to reverse-apply hunks. +Optional argument TEST means to not actually apply or reverse-apply any +hunks, but return the same information: nil if all hunks can be applied, +or the number of hunks that can't be applied." (interactive (list (use-region-beginning) (use-region-end) current-prefix-arg)) @@ -2234,7 +2238,7 @@ saved, or the number of failed hunk applications otherwise." (goto-char (or beg (point-min))) (diff-beginning-of-hunk t) (while (pcase-let ((`(,buf ,line-offset ,pos ,_src ,dst ,switched) - (diff-find-source-location nil reverse))) + (diff-find-source-location nil reverse test))) (cond ((and line-offset (not switched)) (push (cons pos dst) (alist-get buf buffer-edits))) @@ -2244,23 +2248,25 @@ saved, or the number of failed hunk applications otherwise." (or (not end) (< (point) end)) (looking-at-p diff-hunk-header-re))))) (cond ((zerop failures) - (dolist (buf-edits (reverse buffer-edits)) - (with-current-buffer (car buf-edits) - (dolist (edit (cdr buf-edits)) - (let ((pos (car edit)) - (dst (cdr edit)) - (inhibit-read-only t)) - (goto-char (car pos)) - (delete-region (car pos) (cdr pos)) - (insert (car dst)))) - (save-buffer))) - (message "Saved %d buffers" (length buffer-edits)) + (unless test + (dolist (buf-edits (reverse buffer-edits)) + (with-current-buffer (car buf-edits) + (dolist (edit (cdr buf-edits)) + (let ((pos (car edit)) + (dst (cdr edit)) + (inhibit-read-only t)) + (goto-char (car pos)) + (delete-region (car pos) (cdr pos)) + (insert (car dst)))) + (save-buffer))) + (message "Saved %d buffers" (length buffer-edits))) nil) (t - (message (ngettext "%d hunk failed; no buffers changed" - "%d hunks failed; no buffers changed" - failures) - failures) + (unless test + (message (ngettext "%d hunk failed; no buffers changed" + "%d hunks failed; no buffers changed" + failures) + failures)) failures)))) (defalias 'diff-mouse-goto-source #'diff-goto-source) @@ -2616,7 +2622,7 @@ Call FUN with two args (BEG and END) for each hunk." (or (ignore-errors (diff-hunk-next) (point)) max))))))))) -;; This doesn't use `diff--iterate-hunks', since that assumes that +;; This doesn't use `diff--iterate-hunks' because that assumes that ;; hunks don't change size. (defun diff--ignore-whitespace-all-hunks () "Re-diff all the hunks, ignoring whitespace-differences." diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el index ded24ada8a0..da67f7f1815 100644 --- a/lisp/vc/vc-hooks.el +++ b/lisp/vc/vc-hooks.el @@ -970,7 +970,9 @@ In the latter case, VC mode is deactivated for this buffer." "w w" #'vc-switch-working-tree "w s" #'vc-working-tree-switch-project "w x" #'vc-delete-working-tree - "w R" #'vc-move-working-tree) + "w R" #'vc-move-working-tree + "w a" #'vc-apply-to-other-working-tree + "w A" #'vc-apply-root-to-other-working-tree) (fset 'vc-prefix-map vc-prefix-map) (define-key ctl-x-map "v" 'vc-prefix-map) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index e0e9d0e2ac6..07b9ea8b951 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -4661,6 +4661,157 @@ BACKEND is the VC backend." (when-let* ((p (project-current nil to))) (project-remember-project p))) +(declare-function diff-apply-buffer "diff-mode") + +;;;###autoload +(defun vc-apply-to-other-working-tree (directory &optional move) + "Apply VC fileset's local changes to working tree under DIRECTORY. +Must be called from within an existing VC working tree. +When called interactively, prompts for DIRECTORY. +With a prefix argument (when called from Lisp, with optional argument +MOVE non-nil), don't just copy the changes, but move them, from the +current working tree to DIRECTORY. + +When called from a `diff-mode' buffer, move or copy the changes +specified by the contents of that buffer, only. + +If any changes to be moved or copied can't be applied to DIRECTORY, it +is an error, and no changes are applied. +If any changes to be moved can't be reverse-applied to this working +tree, it is an error, and no changes are moved." + ;; The double prefix arg that `vc-apply-root-to-other-working-tree' + ;; has is omitted here, for now, because it is probably less useful. + (interactive + (list + (vc--prompt-other-working-tree + (vc-responsible-backend default-directory) + (format "%s changes to working tree" + (if current-prefix-arg "Move" "Apply"))) + current-prefix-arg)) + (let* ((relative-dir (file-relative-name default-directory + (vc-root-dir))) + (mirror-dir (expand-file-name relative-dir directory))) + (unless (file-directory-p mirror-dir) + (user-error "`%s' not found in `%s'" relative-dir directory)) + (vc--apply-to-other-working-tree directory mirror-dir + (vc-deduce-fileset) + (and (derived-mode-p 'diff-mode) + (buffer-string)) + move))) + +;;;###autoload +(defun vc-apply-root-to-other-working-tree (directory &optional move preview) + "Apply all local changes to this working tree to the one under DIRECTORY. +Must be called from within an existing VC working tree. +When called interactively, prompts for DIRECTORY. +With a prefix argument (when called from Lisp, with optional argument +MOVE non-nil), don't just copy the changes, but move them, from the +current working tree to DIRECTORY. + +With a double prefix argument (\\[universal-argument] \\[universal-argument]; \ +when called from Lisp, with +optional argument PREVIEW non-nil), don't actually apply changes to +DIRECTORY, but instead show all those changes in a `diff-mode' buffer +with `default-directory' set to DIRECTORY. +You can then selectively apply changes with `diff-mode' commands like +`diff-apply-hunk' and `diff-apply-buffer'. + +If any changes to be moved or copied can't be applied to DIRECTORY, it +is an error, and (except with \\[universal-argument] \\[universal-argument]) \ +no changes are applied. +If any changes to be moved can't be reverse-applied to this working +tree, it is an error, and no changes are moved." + (interactive + (list + (vc--prompt-other-working-tree + (vc-responsible-backend default-directory) + (format "%s changes to working tree" + (if (equal current-prefix-arg '(4)) "Move" "Apply"))) + (equal current-prefix-arg '(4)) + (equal current-prefix-arg '(16)))) + (cond ((and move preview) + (error "Invalid arguments to vc-apply-root-to-other-working-tree")) + (preview + ;; In this mode, no need to abort if some hunks aren't + ;; applicable. + (vc-root-diff nil t) + (setq default-directory directory) + (message + (substitute-command-keys + "Use \\[diff-hunk-kill] to kill hunks not to be copied \ +then \\[diff-apply-buffer] to copy changes, +or use \\[diff-apply-hunk] to copy individual hunks. \ +Type \\[describe-mode] for more commands"))) + (t + (let ((default-directory (vc-root-dir))) + (vc--apply-to-other-working-tree directory directory + `(,(vc-deduce-backend) + (,default-directory)) + nil move))))) + +(defcustom vc-no-confirm-moving-changes nil + "Whether VC commands prompt before moving changes between working trees. + +Normally the commands \\[vc-apply-to-other-working-tree] \ +and \\[vc-apply-root-to-other-working-tree] prompt for confirmation +when asked to move changes between working trees (i.e., when invoked +with a prefix argument). This is because it can be surprising to have +work disappear from your current working tree. You can customize this +option to non-nil to skip the prompting." + :type '(choice (const :tag "Prompt before moving changes" nil) + (const :tag "Move changes without prompting" t)) + :group 'vc + :version "31.1") + +(defun vc--apply-to-other-working-tree + (directory mirror-dir fileset patch-string move) + "Workhorse routine for copying/moving changes to other working trees. +DIRECTORY is the root of the target working tree +(used only for messages). +MIRROR-DIR is the target directory for application. +FILESET is the VC fileset from which to copy changes. +PATCH-STRING non-nil overrides calling `vc-diff-internal' on FILESET to +determine the changes to copy or move. +MOVE non-nil means to move instead of copy." + (unless (or (not move) + vc-no-confirm-moving-changes + (yes-or-no-p + (format "Really %s uncommitted work out of this working tree?" + (propertize "move" 'face 'bold)))) + (user-error "Aborted")) + (vc-buffer-sync-fileset fileset nil) + (with-temp-buffer + (if (not patch-string) + (let ((display-buffer-overriding-action '(display-buffer-no-window + (allow-no-window . t)))) + (vc-diff-internal nil fileset nil nil nil (current-buffer))) + (diff-mode) + (insert patch-string)) + (let ((default-directory mirror-dir)) + (vc-buffer-sync-fileset (diff-vc-deduce-fileset) nil)) + (when-let* (move + (failed (diff-apply-buffer nil nil 'reverse 'test))) + ;; If PATCH-STRING is non-nil and this fails, the user called us + ;; from a `diff-mode' buffer that doesn't reverse-apply; that's + ;; a `user-error'. + ;; If PATCH-STRING is nil and this fails, `vc-diff-internal' + ;; generated a nonsense diff -- not the user's fault. + (funcall (if patch-string #'user-error #'error) + (ngettext "%d hunk does not reverse-apply to this working tree" + "%d hunks do not reverse-apply to this working tree" + failed) + failed)) + (let ((default-directory mirror-dir)) + (when-let* ((failed (diff-apply-buffer))) + (user-error (ngettext "%d hunk does not apply to `%s'" + "%d hunks do not apply to `%s'" + failed) + failed directory))) + (when move + (diff-apply-buffer nil nil 'reverse)) + (message "Changes %s to `%s'" + (if move "moved" "applied") directory))) + ;; These things should probably be generally available commit 0000d9b7b1a457793deecff2cb56ec82c04545f3 Author: Michael Albinus Date: Tue Sep 16 09:10:04 2025 +0200 ; Fix last change in php-ts-mode.el * lisp/progmodes/php-ts-mode.el (php-ts-mode--language-source-alist): Fix quoting. diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index 65a177e6cc8..0e3bf324b43 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -80,7 +80,7 @@ ;;; Install treesitter language parsers (defvar php-ts-mode--language-source-alist - '((php "https://github.com/tree-sitter/tree-sitter-php" + `((php "https://github.com/tree-sitter/tree-sitter-php" :commit ,(if (and (treesit-available-p) (< (treesit-library-abi-version) 15)) "f7cf7348737d8cff1b13407a0bfedce02ee7b046" commit 3cb1cdfba79f12897d887f0a204943adb236ab3f Author: Michael Albinus Date: Tue Sep 16 09:04:05 2025 +0200 ; Instrument file-notify-test07-many-events * test/lisp/filenotify-tests.el (file-notify-test07-many-events): Instrument for debugging on emba. diff --git a/test/lisp/filenotify-tests.el b/test/lisp/filenotify-tests.el index d1e1ac25007..42c4ade7ae3 100644 --- a/test/lisp/filenotify-tests.el +++ b/test/lisp/filenotify-tests.el @@ -882,7 +882,7 @@ delivered." '(GFamFileMonitor GFamDirectoryMonitor GKqueueFileMonitor GPollFileMonitor)) '()) - ;; For GInotifyFileMonitor,`write-region' raises also an + ;; For GInotifyFileMonitor, `write-region' raises also an ;; `attribute-changed' event on gio. ((and (string-equal (file-notify--test-library) "gio") (eq (file-notify--test-monitor) 'GInotifyFileMonitor)) @@ -1168,6 +1168,11 @@ delivered." :tags '(:expensive-test) (skip-unless (file-notify--test-local-enabled)) + (let ((file-notify-debug ;; Temporarily. + (or file-notify-debug + (and (getenv "EMACS_EMBA_CI") + (string-equal (file-notify--test-library) "gio") + (eq (file-notify--test-monitor) 'GInotifyFileMonitor))))) (with-file-notify-test (should (setq file-notify--test-desc @@ -1239,7 +1244,7 @@ delivered." (file-notify--rm-descriptor file-notify--test-desc) ;; The environment shall be cleaned up. - (file-notify--test-cleanup-p)))) + (file-notify--test-cleanup-p))))) (file-notify--deftest-remote file-notify-test07-many-events "Check that events are not dropped for remote directories.") commit 76f50fa55ce19eb4ae0a249a53289c724ea23492 Author: Dmitry Gutov Date: Tue Sep 16 02:14:09 2025 +0300 ruby-syntax-propertize: Add exception for /= * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize): Create an exception for assign-division operator not to be recognized as regexp start (bug#79454). * test/lisp/progmodes/ruby-mode-resources/ruby.rb: Add example. diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 459f8f338f7..b1104bf88a0 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -2204,6 +2204,7 @@ A slash character after any of these should begin a regexp.")) (or (not ;; Looks like division. (or (eql (char-after) ?\s) + (eql (char-after) ?=) (not (eql (char-before (1- (point))) ?\s)))) (save-excursion (forward-char -1) diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby.rb b/test/lisp/progmodes/ruby-mode-resources/ruby.rb index a411b39a8fc..4fa7332f017 100644 --- a/test/lisp/progmodes/ruby-mode-resources/ruby.rb +++ b/test/lisp/progmodes/ruby-mode-resources/ruby.rb @@ -39,6 +39,7 @@ def foo # Highlight the regexp after "if". x = toto / foo if / do bar/ =~ "dobar" +x /= 4 # Regexp options are highlighted. commit 3438e15e31d88acef13751ef5e56b85d79ab78d9 Author: Vincenzo Pupillo Date: Mon Sep 15 21:20:52 2025 +0200 Fix tree-sitter ABI version incompatibility in php-ts-mode * lisp/progmodes/php-ts-mode.el (php-ts-mode--language-source-alist): For ABI version < 15 add the recommended version "v0.23.12" (full hash "f7cf7348737d8cff1b13407a0bfedce02ee7b046"). diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index 3c9cb2ba8d0..65a177e6cc8 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -81,7 +81,10 @@ ;;; Install treesitter language parsers (defvar php-ts-mode--language-source-alist '((php "https://github.com/tree-sitter/tree-sitter-php" - :commit "5b5627faaa290d89eb3d01b9bf47c3bb9e797dea" + :commit ,(if (and (treesit-available-p) + (< (treesit-library-abi-version) 15)) + "f7cf7348737d8cff1b13407a0bfedce02ee7b046" + "5b5627faaa290d89eb3d01b9bf47c3bb9e797dea") :source-dir "php/src") (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc" :commit "03bb10330704b0b371b044e937d5cc7cd40b4999")) commit d6a7b0cd33c6300aeba184d1e7b5fdec41704058 Author: Michael Albinus Date: Mon Sep 15 18:26:50 2025 +0200 Tramp code cleanup * lisp/net/tramp.el (tramp-use-absolute-autoload-file-names) (tramp-skeleton-file-name-all-completions) (tramp-parse-auth-sources, tramp-parse-file, tramp-parse-netrc): * lisp/net/tramp-cache.el (tramp-parse-connection-properties): * lisp/net/tramp-gvfs.el (tramp-gvfs-parse-device-names): * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory): Use `seq-uniq'. * lisp/net/tramp.el (tramp-register-foreign-file-name-handler): * lisp/net/tramp-fuse.el (tramp-fuse-handle-directory-files): Use `seq-union'. * test/lisp/net/tramp-archive-tests.el (tramp-archive-test17-insert-directory): * test/lisp/net/tramp-tests.el (tramp-test17-insert-directory): Use `seq-union'. (tramp-test42-utf8): Use `seq-uniq' and `tramp-compat-seq-keep'. diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index 4ecc804bf20..eedb5a3e9ba 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -647,7 +647,7 @@ your laptop to different networks frequently." "Return a list of (user host) tuples allowed to access for METHOD. This function is added always in `tramp-get-completion-function' for all methods. Resulting data are derived from connection history." - (delete-dups + (seq-uniq (tramp-compat-seq-keep (lambda (key) (let ((tramp-verbose 0)) diff --git a/lisp/net/tramp-fuse.el b/lisp/net/tramp-fuse.el index 72b1934faca..07f4ef74581 100644 --- a/lisp/net/tramp-fuse.el +++ b/lisp/net/tramp-fuse.el @@ -59,11 +59,10 @@ (let ((result (tramp-skeleton-directory-files directory full match nosort count ;; Some storage systems do not return "." and "..". - (delete-dups - (append - '("." "..") - (tramp-fuse-remove-hidden-files - (directory-files (tramp-fuse-local-file-name directory)))))))) + (seq-union + '("." "..") + (tramp-fuse-remove-hidden-files + (directory-files (tramp-fuse-local-file-name directory))))))) (if full ;; Massage the result. (let ((local (rx diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index 7f3ac945bb6..c283c119b87 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -2556,7 +2556,7 @@ This uses \"avahi-browse\" in case D-Bus is not enabled in Avahi." (split-string (shell-command-to-string (format "avahi-browse -trkp %s" service)) (rx (+ (any "\r\n"))) 'omit (rx bol "+;" (* nonl) eol))))) - (delete-dups + (seq-uniq (tramp-compat-seq-keep (lambda (x) (ignore-errors diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 0a454fed69b..8922adb7586 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2770,7 +2770,7 @@ The method used must be an out-of-band method." #'file-name-directory (list localname)))) (unless (or full-directory-p (member "-d" switches)) (setq switches (append switches '("-d")))) - (setq switches (delete-dups switches) + (setq switches (seq-uniq switches) switches (mapconcat #'tramp-shell-quote-argument switches " ")) (when wildcard (setq switches (concat switches " " wildcard))) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index a27e8b8fbe8..e8f791c567b 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -2729,7 +2729,7 @@ This avoids problems during autoload, when `load-path' contains remote file names." ;; We expect all other Tramp files in the same directory as tramp.el. (let* ((dir (expand-file-name (file-name-directory (locate-library "tramp")))) - (files (delete-dups + (files (seq-uniq (mapcar #'file-name-sans-extension (directory-files @@ -2803,12 +2803,11 @@ whether HANDLER is to be called. Add operations defined in ;; Mark `operations' the handler is responsible for. (put #'tramp-file-name-handler 'operations - (delete-dups - (append - (get 'tramp-file-name-handler 'operations) - (mapcar - #'car - (symbol-value (intern (concat (symbol-name handler) "-alist")))))))) + (seq-union + (get 'tramp-file-name-handler 'operations) + (mapcar + #'car + (symbol-value (intern (concat (symbol-name handler) "-alist"))))))) (defun tramp-exists-file-name-handler (operation &rest args) "Check, whether OPERATION runs a file name handler." @@ -2979,7 +2978,7 @@ not in completion mode." BODY is the backend specific code." (declare (indent 2) (debug t)) `(ignore-error file-missing - (delete-dups (delq nil (delete "" + (seq-uniq (delq nil (delete "" (let* ((case-fold-search read-file-name-completion-ignore-case) (result (progn ,@body))) ;; Some storage systems do not return "." and "..". @@ -3372,7 +3371,7 @@ as for \"~/.authinfo.gpg\"." This function is added always in `tramp-get-completion-function' for all methods. Resulting data are derived from default settings." (and tramp-completion-use-auth-sources - (delete-dups + (seq-uniq (tramp-compat-seq-keep (lambda (x) `(,(plist-get x :user) ,(plist-get x :host))) (auth-source-search @@ -3401,7 +3400,7 @@ User is always nil." (with-temp-buffer (insert-file-contents-literally filename) (goto-char (point-min)) - (delete-dups (delq nil + (seq-uniq (delq nil (cl-loop while (not (eobp)) collect (funcall function)))))))) (defun tramp-parse-rhosts (filename) @@ -3538,7 +3537,7 @@ Host is always \"localhost\"." (defun tramp-parse-netrc (filename) "Return a list of (user host) tuples allowed to access. User may be nil." - (delete-dups + (seq-uniq (tramp-compat-seq-keep (lambda (item) (and (assoc "machine" item) @@ -5347,8 +5346,8 @@ should be set connection-local.") (or (not (stringp buffer)) (not (tramp-tramp-file-p buffer))) (or (not (stringp stderr)) (not (tramp-tramp-file-p stderr)))))) -;; This function is used by tramp-*-handle-make-process and -;; tramp-sh-handle-process-file to filter local environment variables +;; This function is used by `tramp-*-handle-make-process' and +;; `tramp-sh-handle-process-file' to filter local environment variables ;; that should not be propagated remotely. Users can override this ;; function if necessary, for example, to ensure that a specific ;; environment variable is applied to remote processes, whether it diff --git a/test/lisp/net/tramp-archive-tests.el b/test/lisp/net/tramp-archive-tests.el index 0ff0f3ddd4d..33dc0b9d4af 100644 --- a/test/lisp/net/tramp-archive-tests.el +++ b/test/lisp/net/tramp-archive-tests.el @@ -559,7 +559,7 @@ This checks also `file-name-as-directory', `file-name-directory', (let (;; We test for the summary line. Keyword "total" could be localized. (process-environment - (append '("LANG=C" "LANGUAGE=C" "LC_ALL=C") process-environment))) + (seq-union '("LANG=C" "LANGUAGE=C" "LC_ALL=C") process-environment))) (unwind-protect (progn (with-temp-buffer diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 7b90bb4d9be..e011b99be57 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -3515,7 +3515,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'." (tmp-name2 (expand-file-name "foo" tmp-name1)) ;; We test for the summary line. Keyword "total" could be localized. (process-environment - (append '("LANG=C" "LANGUAGE=C" "LC_ALL=C") process-environment))) + (seq-union '("LANG=C" "LANGUAGE=C" "LC_ALL=C") process-environment))) (unwind-protect (progn (make-directory tmp-name1) @@ -5656,8 +5656,7 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." (ert-deftest tramp-test30-make-process () "Check `make-process'." :tags (append '(:expensive-test :tramp-asynchronous-processes) - (and (getenv "EMACS_EMBA_CI") - '(:unstable))) + (and (getenv "EMACS_EMBA_CI") '(:unstable))) (skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-supports-processes-p)) @@ -7887,8 +7886,8 @@ This requires restrictions of file name syntax." "🌈🍒👋") (when (and (tramp--test-expensive-test-p) (not (tramp--test-windows-nt-p))) - (delete-dups - (mapcar + (seq-uniq + (tramp-compat-seq-keep ;; Use all available language specific snippets. (lambda (x) (and commit 72c19d0f395e8883c65689c86e79905a34d36586 Author: Michael Albinus Date: Mon Sep 15 11:43:52 2025 +0200 Improve check for netrc tokens * doc/misc/auth.texi (Help for users): Mention also "#" inside tokens. * lisp/auth-source.el (auth-source-netrc-create): Better check for token format. * test/lisp/auth-source-tests.el (auth-source-backend-parse-json): New test. (auth-source-test-netrc-create-secret): Extend test. diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index cc6fc0c3396..1fd232a697e 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -132,8 +132,8 @@ use them automatically, either pass @code{:client-certificate t} to @code{open-network-stream}, or customize @code{network-stream-use-client-certificates} to @code{t}. -You can use spaces inside a password or other token by surrounding the -token with either single or double quotes. +You can use spaces or number signs (@t{"#"}) inside a password or other +token by surrounding the token with either single or double quotes. You can use apostrophes inside a password or other token by surrounding it with double quotes, e.g., @t{"he'llo"}. Similarly you diff --git a/lisp/auth-source.el b/lisp/auth-source.el index 442fe2fc1e3..e7c8f43b7f9 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -1468,7 +1468,9 @@ See `auth-source-search' for details on SPEC." (when (and (stringp data) (< 0 (length data))) (when (eq r 'secret) - (setq save-function t)) + (setq save-function + (not (and (string-match-p "\"" data) + (string-match-p "'" data))))) ;; this function is not strictly necessary but I think it ;; makes the code clearer -tzz (let ((printer (lambda () @@ -1484,9 +1486,12 @@ See `auth-source-search' for details on SPEC." (secret "password") (port "port") ; redundant but clearer (t (symbol-name r))) - (if (string-match "[\"# ]" data) - (format "%S" data) - data))))) + (cond + ((string-match-p "\"" data) + (format "'%s'" data)) + ((string-match-p "['# ]" data) + (format "%S" data)) + (t data)))))) (setq add (concat add (funcall printer))))))) (when save-function diff --git a/test/lisp/auth-source-tests.el b/test/lisp/auth-source-tests.el index b4bc0f5a7f6..d6845b0af37 100644 --- a/test/lisp/auth-source-tests.el +++ b/test/lisp/auth-source-tests.el @@ -119,6 +119,16 @@ (create-function . auth-source-netrc-create)))) +(ert-deftest auth-source-backend-parse-json () + (auth-source-validate-backend '(:source "foo.json") + '((source . "foo.json") + (type . json) + (search-function . auth-source-json-search) + (create-function + ;; To be implemented: + ;; . auth-source-json-create)))) + . ignore)))) + (ert-deftest auth-source-backend-parse-secrets () (provide 'secrets) ; simulates the presence of the `secrets' package (let ((secrets-enabled t)) @@ -383,7 +393,8 @@ (auth-source-save-behavior t) (auth-source-ignore-non-existing-file t) host auth-info auth-passwd) - (dolist (passwd '("foo" "" nil)) + (dolist (passwd `("foo" "bar baz" "bar'baz" "bar\"baz" + "foo'bar\"baz" "" nil)) ;; Redefine `read-*' in order to avoid interactive input. (cl-letf (((symbol-function 'read-passwd) (lambda (_) passwd)) ((symbol-function 'read-string) @@ -409,7 +420,9 @@ auth-passwd (auth-info-password auth-info)) (with-temp-buffer (insert-file-contents netrc-file) - (if (zerop (length passwd)) + (if (or (zerop (length passwd)) + (and (string-match-p "\"" passwd) + (string-match-p "'" passwd))) (progn (should-not (plist-get auth-info :user)) (should-not (plist-get auth-info :host)) commit 897d32285fc17b8afd889b1f733aed7149b50a5c Author: Paul Eggert Date: Sun Sep 14 10:06:51 2025 -0700 Fix incorrect timezones for London and Paris Also, replace obsolete city name "Bangalore" with "Delhi", and improve doc strings. * lisp/time.el (zoneinfo-style-world-list) (legacy-style-world-list): Evidently "Bangalore" was chosen for Asia/Kolkata to avoid confusion about "Calcutta" vs "Kolkata". However, it has similar confusion with "Bengaluru". Use "Delhi" instead, as Delhi is larger, its name has not changed for some time, and proposals to change its name have so far failed. See: Sharma MS. Vijay Goel wants Delhi renamed as Dilli, but historians say it will only spell trouble. Times of India. 2019-07-25. (zoneinfo-style-world-list): Update doc string. “Posix-style” was ambiguous as TZDB-style strings are specified only by POSIX.1-2024, so use “TZDB-style” instead. Say “AREA/LOCATION” to be consistent. If AREA/LOCATION is unsupported, Emacs signals an error on NetBSD so don’t imply that some other timezone will be used. (legacy-style-world-list): Remove ("GMT0BST" "London") and ("CET-1CDT" "Paris"). These are wrong because neither London nor Paris follow US DST rules. Instead, use ("GMT0BST,M3.5.0/1,M10.5.0" "London") and ("CET-1CEST,M3.5.0,M10.5.0/3" "Paris") if they work, and omit London and Paris entries otherwise. diff --git a/lisp/time.el b/lisp/time.el index 517eea20ad1..ecacaf08aa4 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -452,7 +452,7 @@ runs the normal hook `display-time-hook' after each update." ("America/New_York" "New York") ("Europe/London" "London") ("Europe/Paris" "Paris") - ("Asia/Kolkata" "Bangalore") + ("Asia/Kolkata" "Delhi") ("Asia/Tokyo" "Tokyo")) "Alist of zoneinfo-style time zones and places for `world-clock'. Each element has the form (TIMEZONE LABEL). @@ -461,27 +461,37 @@ the name of a region -- a continent or ocean, and LOCATION is the name of a specific location, e.g., a city, within that region. LABEL is a string to display as the label of that TIMEZONE's time. -This option has effect only on systems that support Posix-style -zoneinfo files specified as CONTINENT/CITY. In particular, +This option has effect only on systems that support TZDB-style +TZ strings specified as AREA/LOCATION. In particular, MS-Windows doesn't support that; use `legacy-style-world-list' instead. -Also, AREA/LOCATION must specify a zoneinfo file installed on your -system, otherwise what timezone will be used depends on the underlying -OS and library." +Also, AREA/LOCATION must specify a timezone supported by your system, +otherwise the behavior depends on the underlying OS and library." :type '(repeat (list string string)) :version "23.1") (defcustom legacy-style-world-list - '(("PST8PDT" "Seattle") - ("EST5EDT" "New York") - ("GMT0BST" "London") - ("CET-1CDT" "Paris") - ("IST-5:30" "Bangalore") - ("JST-9" "Tokyo")) + ;; This list is for circa 2025 timekeeping, and will need changes + ;; if any of these locations change names, time zones, or DST rules. + (append + ;; These entries assume the platform's default DST rules are for the US, + ;; which is true of all known platforms that use this variable. + '(("PST8PDT" "Seattle") + ("EST5EDT" "New York")) + + ;; Use POSIX.1-2017 style TZ if supported; otherwise, give up on London + ;; and Paris as "GMT0BST" and "CET-1CDT" would use incorrect DST. + (when (string-equal (format-time-string "%z" 0 "XXX0YYY,M9.5.0/1,M4.1.0/3") + "+0100") + '(("GMT0BST,M3.5.0/1,M10.5.0" "London") + ("CET-1CEST,M3.5.0,M10.5.0/3" "Paris"))) + + '(("IST-5:30" "Delhi") + ("JST-9" "Tokyo"))) "Alist of traditional-style time zones and places for `world-clock'. Each element has the form (TIMEZONE LABEL). TIMEZONE should be a string of the form: - std[+|-]offset[dst[offset][,date[/time],date[/time]]] + std[+|-]offset[dst[[+|-]offset][,date[/time],date[/time]]] See the documentation of the TZ environment variable on your system, for more details about the format of TIMEZONE. commit 04342d365406468b9d82ad81277f20d5bfd0eb4d Author: Eli Zaretskii Date: Sun Sep 14 18:24:31 2025 +0300 * lisp/net/shr.el (shr-tag-sub): Handle BOB (bug#79448). diff --git a/lisp/net/shr.el b/lisp/net/shr.el index b25b6783066..c90230c1703 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1644,7 +1644,7 @@ Based on https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-infore ;; happen sometimes because of a
tag and the intent seems to be ;; alignment of subscript and superscript but I don't think that is ;; possible in Emacs. So we remove the newline in that case. - (when (bolp) + (when (and (bolp) (not (bobp))) (forward-char -1) (delete-char 1)) (let ((start (point))) commit d37a55c0c80b4123c56d82978acd1cafaadd4ee3 Author: Andreas Schwab Date: Fri Oct 18 22:39:34 2024 +0200 * lisp/calc/calc.el (calc): Ony substitute binding of calc-help-prefix after calc-ext has been loaded. diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 6f4664dd6c4..ed32479ce38 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -1533,7 +1533,9 @@ See `window-dedicated-p' for what that means." (unless calc-inhibit-startup-message (message (substitute-command-keys (concat "Welcome to the GNU Emacs Calculator! \\" - "Press \\[calc-help] or \\[calc-help-prefix] for help, \\[calc-quit] to quit")))) + "Press \\[calc-help] " + (if (featurep 'calc-ext) "or \\[calc-help-prefix] ") + "for help, \\[calc-quit] to quit")))) (run-hooks 'calc-start-hook) (and (windowp full-display) (window-point full-display) commit cb17a8bbf3989c0ebbebca0310dc7009f3442df7 Author: Mattias Engdegård Date: Sat Sep 13 16:32:32 2025 +0200 Use linear arrays in ispell test to work with old bash * test/lisp/textmodes/ispell-resources/fake-aspell-new.bash: Avoid using associative arrays since they are not available in old bash versions that come with some systems (bug#79177). diff --git a/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash b/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash index 1eb004f6ba6..dec4f2d1667 100755 --- a/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash +++ b/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash @@ -22,10 +22,18 @@ show_vv() printf '%s\n' "@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.0)" } +in_dict() +{ + local x=$1 + for y in ${sessiondict[@]}; do + if [ $y = $x ]; then return 0; fi + done + return 1 +} + imitate_pipe() { local a - declare -A sessiondict show_vv while read a ; do #printf 'pipe="%s"\n' "$a" >> /tmp/lwf_mock-aspell.log @@ -34,13 +42,13 @@ imitate_pipe() elif [[ "$a" == '+' || "$a" == '~nroff' || "$a" == '~tex' || "$a" == '!' || "$a" == '-' || "$a" == '%' ]] ; then printf '' elif [[ "${a:0:1}" == '@' ]] ; then - sessiondict["${a:1}"]="true" + sessiondict+=("${a:1}") printf '' else for b in $a ; do if [[ "$b" == '^' ]] ; then printf '' - elif [[ ${sessiondict[$b]} == 'true' || ${sessiondict[${b#^}]} == 'true' ]] ; then + elif in_dict "$b" || in_dict "${b#^}" ; then printf '*\n' elif [[ "$b" == '^tarampampamtararam' || "$b" == 'tarampampamtararam' ]] ; then printf '# tarampampamtararam 0\n' # wrong word commit 01e7d537b00bec79a3e0d65ee91da0549621e1a3 Author: Mattias Engdegård Date: Sat Sep 13 17:18:27 2025 +0200 ; ispell-tests: use require instead of load diff --git a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el index cd31cd52d76..f3c9fc7a8a0 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el @@ -29,12 +29,10 @@ (require 'ert-x) (eval-and-compile - (add-to-list 'load-path (when (not (null load-file-name)) - (directory-file-name - (file-name-directory load-file-name)))) - (load "ispell-tests-common")) - -(declare-function letopt "ispell-tests-common" t t) + (let ((load-path (cons (file-name-directory + (or (macroexp-file-name) load-file-name)) + load-path))) + (require 'ispell-tests-common))) (ert-deftest ispell/aspell/ispell-check-version/works () "Test that aspell is correctly detected." diff --git a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el index 79d7dbbc677..18206b08608 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el @@ -29,10 +29,10 @@ (require 'ert-x) (eval-and-compile - (add-to-list 'load-path (when (not (null load-file-name)) - (directory-file-name - (file-name-directory load-file-name)))) - (load "ispell-tests-common")) + (let ((load-path (cons (file-name-directory + (or (macroexp-file-name) load-file-name)) + load-path))) + (require 'ispell-tests-common))) (ert-deftest ispell/hunspell/ispell-word/english/check-only () "This test checks that Russian spellchecking works for Hunspell." diff --git a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el index 74c56de6857..b0e887ae1a9 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el @@ -25,11 +25,14 @@ ;;; Code: (require 'ispell) +(require 'ert) +(require 'ert-x) + (eval-and-compile - (add-to-list 'load-path (and load-file-name - (directory-file-name - (file-name-directory load-file-name)))) - (load "ispell-tests-common")) + (let ((load-path (cons (file-name-directory + (or (macroexp-file-name) load-file-name)) + load-path))) + (require 'ispell-tests-common))) (ert-deftest ispell/international-ispell/ispell-word/russian/check-only () "This test checks that Russian spellchecking works for. diff --git a/test/lisp/textmodes/ispell-tests/ispell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-tests.el index d292b390860..d4f3c281e95 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-tests.el @@ -24,25 +24,19 @@ ;;; Code: - +(require 'ert) +(require 'ert-x) (require 'ispell) -(eval-and-compile - (add-to-list 'load-path (when (not (null load-file-name)) - (directory-file-name - (file-name-directory load-file-name)))) - (load "ispell-tests-common")) - -(declare-function letopt "ispell-tests-common" t t) -(declare-function ispell-tests--some-backend "ispell-tests-common" t t) -(declare-function ispell-tests--some-backend-available-p "ispell-tests-common" t t) +(eval-and-compile + (let ((load-path (cons (file-name-directory + (or (macroexp-file-name) load-file-name)) + load-path))) + (require 'ispell-tests-common))) (defconst ispell-tests-emacs-binary-path (concat invocation-directory invocation-name)) -(require 'ert) -(require 'ert-x) - (defun warnings-buffer-exists-p () "Check if a buffer named \"*Warnings*\" exists." (if (get-buffer "*Warnings*") commit 3300f2f40a1f7077437c4ea0abd38bc4b9b961fe Author: Mattias Engdegård Date: Sat Sep 13 17:28:29 2025 +0200 ; * test/lisp/dom-tests.el: silence obsoletion warnings diff --git a/test/lisp/dom-tests.el b/test/lisp/dom-tests.el index eecc4f39808..0681d3b337e 100644 --- a/test/lisp/dom-tests.el +++ b/test/lisp/dom-tests.el @@ -101,13 +101,15 @@ (ert-deftest dom-tests-text () (let ((dom (dom-tests--tree))) - (should (string-empty-p (dom-text dom))) - (should (equal (dom-text (dom-by-tag dom "title")) "Test")))) + (with-suppressed-warnings ((obsolete dom-text)) + (should (string-empty-p (dom-text dom))) + (should (equal (dom-text (dom-by-tag dom "title")) "Test"))))) (ert-deftest dom-tests-texts () (let ((dom (dom-tests--tree))) - (should (equal (dom-texts dom) "Test foo bar")) - (should (equal (dom-texts dom ", ") "Test, foo, bar")))) + (with-suppressed-warnings ((obsolete dom-texts)) + (should (equal (dom-texts dom) "Test foo bar")) + (should (equal (dom-texts dom ", ") "Test, foo, bar"))))) (ert-deftest dom-tests-child-by-tag () (let ((dom (dom-tests--tree))) commit c2a20f65d310539a7d6613565ca742954424112f Author: Mattias Engdegård Date: Sat Sep 13 16:29:51 2025 +0200 ; * test/lisp/net/tramp-tests.el: silence function-quoting warning diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 7f8b71180d2..7b90bb4d9be 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -8851,7 +8851,7 @@ Since it unloads Tramp, it shall be the last test to run." (string-match-p (rx bol "with" (| "tramp" "parsed")) (symbol-name x)) ;; `tramp-register-archive-file-name-handler' is autoloaded ;; in Emacs < 29.1. - (not (eq #'tramp-register-archive-file-name-handler x)) + (not (eq 'tramp-register-archive-file-name-handler x)) ;; `tramp-compat-rx' is autoloaded in Emacs 29.1. (not (eq 'tramp-compat-rx x)) (not (string-match-p commit dd9f185bf68f6ded7841c50a69595f3eefb65b73 Author: Eli Zaretskii Date: Sun Sep 14 09:53:16 2025 +0300 ; Improve discoverability of tree-sitter related functionality * doc/lispref/positions.texi (List Motion): * doc/lispref/modes.texi (Major Mode Conventions, Major Modes) (Parser-based Font Lock, Parser-based Indentation): Improve indexing and cross-references to tree-sitter related stuff. diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 33c02aaabe3..0852a9ab8e1 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -291,6 +291,9 @@ derivative of another mode, as it automatically enforces many coding conventions for you. @xref{Basic Major Modes}, for common modes to derive from. + Writing major modes based on the tree-sitter library has some special +aspects and conventions; see @ref{Tree-sitter Major Modes}. + The standard GNU Emacs Lisp directory tree contains the code for several major modes, in files such as @file{text-mode.el}, @file{texinfo.el}, @file{lisp-mode.el}, and @file{rmail.el}. You can @@ -460,7 +463,8 @@ decides to use it. The mode may have its own syntax table or may share one with other related modes. If it has its own syntax table, it should store this in a variable named @code{@var{modename}-mode-syntax-table}. @xref{Syntax -Tables}. +Tables}. (Major modes based on the tree-sitter library use the parsers +provided by tree-sitter for this, @pxref{Parser-based Font Lock}.) @item If the mode handles a language that has a syntax for comments, it should @@ -479,7 +483,8 @@ for the @var{system-flag} argument to @code{define-abbrev}. @item The mode should specify how to do highlighting for Font Lock mode, by setting up a buffer-local value for the variable -@code{font-lock-defaults} (@pxref{Font Lock Mode}). +@code{font-lock-defaults} (@pxref{Font Lock Mode}). For a major mode +based on tree-sitter, see @ref{Parser-based Font Lock}. @item Each face that the mode defines should, if possible, inherit from an @@ -4289,6 +4294,7 @@ reasonably fast. @node Parser-based Font Lock @subsection Parser-based Font Lock @cindex parser-based font-lock +@cindex font-lock, using tree-sitter @c This node is written when the only parser Emacs has is tree-sitter; @c if in the future more parser are supported, this should be @@ -5216,6 +5222,7 @@ to the file's local variables of the form: @node Parser-based Indentation @subsection Parser-based Indentation @cindex parser-based indentation +@cindex indentation, using tree-sitter @c This node is written when the only parser Emacs has is tree-sitter; @c if in the future more parsers are supported, this should be diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi index 70626ea9bb4..5734fcf8094 100644 --- a/doc/lispref/parsing.texi +++ b/doc/lispref/parsing.texi @@ -2287,7 +2287,7 @@ non-@code{nil}, it sets up indentation. @item If @code{treesit-defun-type-regexp} is non-@code{nil}, it sets up navigation functions for @code{beginning-of-defun} and -@code{end-of-defun}. +@code{end-of-defun}. @xref{List Motion}. @item If @code{treesit-defun-name-function} is non-@code{nil}, it sets up diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi index 60732e7e353..e25cfacd19f 100644 --- a/doc/lispref/positions.texi +++ b/doc/lispref/positions.texi @@ -849,6 +849,8 @@ a defun. The function @code{end-of-defun} calls this function instead of using its normal method. @end defvar +@cindex motion using tree-sitter +@cindex navigation by defun, using tree-sitter @findex treesit-beginning-of-defun @findex treesit-end-of-defun If Emacs is compiled with tree-sitter, it can use the tree-sitter @@ -885,6 +887,7 @@ nested defuns. @findex backward-sentence @vindex forward-sentence-function @cindex sentence, in program source files +@cindex navigation by sentence, using tree-sitter The function that is the value of the variable @code{forward-sentence-function} determines how to move across syntax constructs known as @dfn{sentences}. Major modes can assign their own commit 0dd6e5f642f6705ad2f7f35bbd87415bb6ecc04f Author: Eli Zaretskii Date: Sun Sep 14 08:55:44 2025 +0300 Fix gdb-mi startup when asking user about debuginfod * lisp/progmodes/gdb-mi.el (gdb-init-1): Delay processing of GDB responses while waiting for the user to answer the question about enabling debuginfod. (Bug#79403) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 74dff3217ff..52cb301da84 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -1108,7 +1108,11 @@ detailed description of this mode. ;; trigger questions about debuginfod queries. (if (eq gdb-debuginfod-enable 'ask) (setq gdb-debuginfod-enable - (y-or-n-p "Enable querying debuginfod servers for this session?"))) + ;; Temporarily defer processing of GDB responses, to avoid + ;; confusing us, until the user responds to the query. + (let ((gud-filter-defer-flag t)) + (y-or-n-p + "Enable querying debuginfod servers for this session?")))) (gdb-input (format "-gdb-set debuginfod enabled %s" (if gdb-debuginfod-enable "on" "off")) 'gdb-debuginfod-message) commit 28fecf40ef351b0ec132f87ac07d1a40493ea0ec Author: Eli Zaretskii Date: Sun Sep 14 08:22:45 2025 +0300 ; * lisp/time.el (zoneinfo-style-world-list): Doc fix (bug#437). diff --git a/lisp/time.el b/lisp/time.el index 3750206d08e..517eea20ad1 100644 --- a/lisp/time.el +++ b/lisp/time.el @@ -463,7 +463,10 @@ LABEL is a string to display as the label of that TIMEZONE's time. This option has effect only on systems that support Posix-style zoneinfo files specified as CONTINENT/CITY. In particular, -MS-Windows doesn't support that; use `legacy-style-world-list' instead." +MS-Windows doesn't support that; use `legacy-style-world-list' instead. +Also, AREA/LOCATION must specify a zoneinfo file installed on your +system, otherwise what timezone will be used depends on the underlying +OS and library." :type '(repeat (list string string)) :version "23.1") commit 6f9a46f926e8cd22778416c7b5873dd5793e1d71 Author: Eli Zaretskii Date: Sun Sep 14 07:34:41 2025 +0300 Fix 'ucs-normalize' tests following Unciode 17.0 import * lisp/international/ucs-normalize.el (ucs-normalize-composition-exclusions): Doc fix. * test/lisp/international/ucs-normalize-tests.el (ucs-normalize-tests--failing-lines-part1): Update to _really_ match Unicode 17.0. * admin/notes/unicode: Update instructions. diff --git a/admin/notes/unicode b/admin/notes/unicode index ae94b5c0a3f..21ce2c4cda3 100644 --- a/admin/notes/unicode +++ b/admin/notes/unicode @@ -97,18 +97,23 @@ might need to be updated because it knows about used and unused ranges of Unicode codepoints, which a new release of the Unicode Standard could change. -The data used by ucs-normalize.el might need to be updated. -Specifically, the values of 'ucs-normalize-composition-exclusions' and -'check-range", defined at the beginning of ucs-normalize.el, should be -verified against the latest Unicode data files. - -Run the ucs-names test: +Next, run the ucs-names test: make -C test lisp/international/mule-tests If it fails, the exclusion ranges of codepoints in -'mule-cmds-tests--ucs-names-missing-names' may need to be updated to the -added Unicode codepoints. +'mule-cmds-tests--ucs-names-missing-names' may need to be updated to +account for the added Unicode codepoints. + +The data used by ucs-normalize.el might need to be updated. +Specifically, the values of 'ucs-normalize-composition-exclusions' and +'check-range", defined at the beginning of ucs-normalize.el, should be +verified against the latest Unicode data files. But even if +ucs-normalize.el is not modified, make sure it has been byte-compiled +_after_ the lisp/international/uni-*.el files were regenerated, because +it depends on uni-decomposition.el and uni-combining.el. (We don't have +this dependency in lisp/Makefile.in because recompiling ucs-normalize.el +is expensive, and updates for a new Unicode version are rare.) Next, test normalization functions against NormalizationTests.txt, in the top-level directory run: diff --git a/lisp/international/ucs-normalize.el b/lisp/international/ucs-normalize.el index 169593f1575..a7738f16aae 100644 --- a/lisp/international/ucs-normalize.el +++ b/lisp/international/ucs-normalize.el @@ -131,7 +131,7 @@ #x1D1BF #x1D1C0) "Composition Exclusion List. This list is taken from - https://www.unicode.org/Public/UNIDATA/15.0/CompositionExclusions.txt") + https://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt") ;; Unicode ranges where decompositions & combining characters are ;; defined. Find them by running the following Awk program on diff --git a/test/lisp/international/ucs-normalize-tests.el b/test/lisp/international/ucs-normalize-tests.el index ddc99afeaae..6e78a567670 100644 --- a/test/lisp/international/ucs-normalize-tests.el +++ b/test/lisp/international/ucs-normalize-tests.el @@ -184,7 +184,7 @@ Must be called with `ucs-normalize-tests--norm-buf' as current buffer." (should-not (ucs-normalize-tests--rule1-failing-for-partX 0))) (defconst ucs-normalize-tests--failing-lines-part1 - (list 2432)) + (list )) ;; Keep a record of failures, for consulting afterwards (the ert ;; backtrace only shows a truncated version of these lists). commit 7cdaab61c4be9f143d0ba98a9339586bb010df4f Author: James Thomas Date: Tue Jul 22 08:28:58 2025 +0530 (eww-switch-to-buffer): Prefer seq- functions to cl- * lisp/net/eww.el (eww-switch-to-buffer): Don't reverse the list of buffers since it doesn't do what we want any way (bug#79084). diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 6f06302cb3f..666a5025c2c 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2420,23 +2420,23 @@ If CHARSET is nil then use UTF-8." "Prompt for an EWW buffer to display in the selected window. If no such buffer exist, fallback to calling `eww'." (interactive nil eww-mode) - (let ((list (cl-loop for buf in (nreverse (buffer-list)) - if (and (eww--buffer-p buf) - (not (eq buf (current-buffer)))) - collect (buffer-name buf)))) + (let ((list (seq-filter + (lambda (buf) + (and (eww--buffer-p buf) (not (eq buf (current-buffer))))) + (buffer-list)))) (if list (pop-to-buffer-same-window (if (length= list 1) (car list) (completing-read "Switch to EWW buffer: " (completion-table-with-metadata - list + (mapcar #'buffer-name list) `((category . buffer) (annotation-function . ,(lambda (buf) (with-current-buffer buf (format " %s" (eww-current-url))))))) - nil t))) + nil t nil nil (car-safe list)))) (call-interactively #'eww)))) (defun eww-toggle-fonts () commit 83b623ea3a5e9d7b8eea5112e4b8404eb1507f43 Author: Eli Zaretskii Date: Sat Sep 13 22:23:12 2025 +0300 Fix 'define-globalized-minor-mode' when :variable is used * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix a typo (bug#79412). diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index ca921308877..a3ab5f18690 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -570,7 +570,7 @@ Disable the mode if ARG is a negative number.\n\n" (dolist (buf (buffer-list)) (with-current-buffer buf (if ,global-mode (funcall ,turn-on-function) - (when ,mode (,mode -1))))) + (when ,MODE-variable (,mode -1))))) ,@body) ,(when predicate commit fd5d35407abb784344c9bf4e0ae731c72df79d57 Author: Eli Zaretskii Date: Sat Sep 13 17:52:30 2025 +0300 Fix Unicode-related tests * test/lisp/international/mule-tests.el (mule-cmds-tests--ucs-names-missing-names): Update no-name regions of codepoints to Unicode 17.0. * lisp/international/mule-cmds.el (ucs-names): Fix comments. * admin/notes/unicode: Update instructions. diff --git a/admin/notes/unicode b/admin/notes/unicode index d111de2d7e8..ae94b5c0a3f 100644 --- a/admin/notes/unicode +++ b/admin/notes/unicode @@ -102,6 +102,14 @@ Specifically, the values of 'ucs-normalize-composition-exclusions' and 'check-range", defined at the beginning of ucs-normalize.el, should be verified against the latest Unicode data files. +Run the ucs-names test: + + make -C test lisp/international/mule-tests + +If it fails, the exclusion ranges of codepoints in +'mule-cmds-tests--ucs-names-missing-names' may need to be updated to the +added Unicode codepoints. + Next, test normalization functions against NormalizationTests.txt, in the top-level directory run: diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index f75ee2f0f3f..d3224498a95 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -3105,12 +3105,14 @@ on encoding." (#x16100 . #x16139) ;; (#x1613A . #x167FF) unused (#x16800 . #x16F9F) - (#x16FE0 . #x16FF1) + (#x16FE0 . #x16FF6) ;; (#x17000 . #x187FF) Tangut Ideographs ;; (#x18800 . #x18AFF) Tangut Components ;; (#x18B00 . #x18CFF) Khitan Small Script ;; (#x18D00 . #x18D1E) Tangut Ideograph Supplement - ;; (#x18D80 . #x18DFF) Tangut Components + ;; (#x18D1F . #x18D7F) unused + ;; (#x18D80 . #x18DF2) Tangut Components + ;; (#x18DF3 . #x18DFF) unused (#x1AFF0 . #x1B122) ;; (#x1B123 . #x1B131) unused (#x1B132 . #x1B132) diff --git a/test/lisp/international/mule-tests.el b/test/lisp/international/mule-tests.el index d1434d5a873..d45c89b8a94 100644 --- a/test/lisp/international/mule-tests.el +++ b/test/lisp/international/mule-tests.el @@ -69,7 +69,8 @@ (dotimes (u (1+ (max-char 'ucs))) (when-let* ((name (get-char-code-property u 'name))) (when (and (not (<= #xD800 u #xDFFF)) - (not (<= #x18800 u #x18AFF)) + (not (<= #x18800 u #x18D1E)) + (not (<= #x18D80 u #x18DF2)) (not (char-from-name name))) (push (format "%X" u) code-points)))) (setq code-points (nreverse code-points)) commit 125b3588c9a69625aa72cb3a86c332a804d02458 Merge: abfd8a454a9 47454566772 Author: Eli Zaretskii Date: Sat Sep 13 07:23:12 2025 -0400 Merge from origin/emacs-30 47454566772 ; * lisp/dired-x.el (dired-find-subdir): Doc fix (bug#794... 0832e5fec56 ; * lisp/vc/vc.el (vc-print-root-log): Improve docstring ... 2fafcdbf6ac ; Minor copyedits in src/editfns.c commit 47454566772479c706ea53b4ee9ad5caaafd9130 Author: Eli Zaretskii Date: Sat Sep 13 13:47:04 2025 +0300 ; * lisp/dired-x.el (dired-find-subdir): Doc fix (bug#79440). diff --git a/lisp/dired-x.el b/lisp/dired-x.el index 364e8af5299..fc65a25e897 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -188,16 +188,14 @@ When nil, don't show messages." :group 'dired-x) (defcustom dired-find-subdir nil ; t is pretty near to DWIM... - "If non-nil, Dired always finds a directory in a buffer of its own. -If nil, Dired finds the directory as a subdirectory in some other buffer -if it is present as one. - -If there are several Dired buffers for a directory, the most recently -used is chosen. - -Dired avoids switching to the current buffer, so that if you have -a normal and a wildcard buffer for the same directory, \\[dired] will -toggle between those two." + "If nil, Dired always finds a directory in a buffer of its own. +If non-nil, Dired finds the directory as a subdirectory in some +other buffer if it is present as one. + +If the value is non-nil, and there are several Dired buffers for a +directory, the most recently used is chosen. Dired avoids switching +to the current buffer, so that if you have a normal and a wildcard +buffer for the same directory, \\[dired] will toggle between those two." :type 'boolean :group 'dired-x) commit 0832e5fec569d3247f83a2dbbeae2057a826db71 Author: James Thomas Date: Sat Sep 13 03:41:54 2025 +0530 ; * lisp/vc/vc.el (vc-print-root-log): Improve docstring (bug#79439). diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index cb6197c62b7..1ca895cbecc 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2967,7 +2967,7 @@ number of revisions to show; the default is `vc-log-show-limit'. When called interactively with a prefix argument, prompt for LIMIT, but if the prefix argument is a number, use it as LIMIT. A special case is when the prefix argument is 1: in this case -the command prompts for the ID of a revision, and shows that revision +the command prompts for the id of a REVISION, and shows that revision with its diffs (if the underlying VCS backend supports that)." (interactive (cond commit abfd8a454a9af33317558a7f904088830946d37b Author: Vincenzo Pupillo Date: Thu Aug 28 23:29:30 2025 +0200 Add support for PHP 8.5 in 'php-ts-mode.el' * lisp/progmodes/php-ts-mode.el: Doc string update. (php-ts-mode--language-source-alist): PHP grammar update. (php-ts-mode-find-sibling-rules): Doc string fix. (php-ts-mode--parent-html-heuristic): Handled the case where there is no HTML between two blocks of PHP code. (php-ts-mode--array-element-heuristic): Fix typo. (php-ts-mode--pipe-heuristic): New function that handle PHP's new pipe operator. (php-ts-mode--indent-styles): Removed commented code. More accurate indentation of ‘member_call_expression’. Use of new function to handle pipe operator indentation. New rule for indenting ‘property_hook_list’. (php-ts-mode--test-yield-from-p): New predicate to check whether the 'yield from' keyword is supported by the PHP grammar. (php-ts-mode--test-pipe-p): New predicate to check whether the ‘pipe’ operator is supported by the PHP grammar. (php-ts-mode--keywords): Use the new predicate 'php-ts-mode--test-yield-from-p'. Now it is a var instead of a const. (php-ts-mode--operators): Use the new predicate 'php-ts-mode--test-pipe-p'. Now it is a var instead of a const. (php-ts-mode--font-lock-settings): New rules for 'nullsafe_member_access_expression', 'callable' primitive type. New rule for the 'php_end_tag' if supported by the grammar. More precise rules for 'scoped_call_expression' and 'member_call_expression'. (php-ts-mode--inferior-php-process): Removed this unnecessary variable. (inferior-php-ts-mode-startup): Removed the use of 'php-ts-mode--inferior-php-process'. (php-ts-mode-inferior--write-history): Removed the use of 'php-ts-mode--inferior-php-process'. (Bug#79339) diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index e23293bdd3b..3c9cb2ba8d0 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -30,7 +30,7 @@ ;; - tree-sitter-jsdoc: v0.23.2 ;; - tree-sitter-javascript: v0.23.1-2-g108b2d4 ;; - tree-sitter-html: v0.23.2-1-gd9219ad -;; - tree-sitter-php: v0.23.12 +;; - tree-sitter-php: v0.24.2 ;; ;; We try our best to make builtin modes work with latest grammar ;; versions, so a more recent grammar has a good chance to work too. @@ -81,7 +81,7 @@ ;;; Install treesitter language parsers (defvar php-ts-mode--language-source-alist '((php "https://github.com/tree-sitter/tree-sitter-php" - :commit "f7cf7348737d8cff1b13407a0bfedce02ee7b046" + :commit "5b5627faaa290d89eb3d01b9bf47c3bb9e797dea" :source-dir "php/src") (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc" :commit "03bb10330704b0b371b044e937d5cc7cd40b4999")) @@ -238,8 +238,8 @@ Useful for testing code against multiple simultaneous requests." (defcustom php-ts-mode-find-sibling-rules (list (list (rx "src/" (group (+ not-newline) "/") (group (+ (not "/"))) ".php") "tests/\\1\\2Test.php") (list (rx "tests/" (group (+ not-newline) "/") (group (+ (not "/"))) "Test.php") "src/\\1\\2.php")) - "Rules for finding sibling files. See `find-sibling-rules' for the - form of the value. + "Rules for finding sibling files. +See `find-sibling-rules' for the form of the value. As a default, the rules try to find the corresponding test of the current source file and vice versa. Source files are assumed to be in src/, and tests of in tests/. Many frameworks have a folder @@ -587,7 +587,11 @@ the current line." ((eq php-ts-mode-html-relative-indent 'ignore) (line-beginning-position)) ((search-backward "" (treesit-node-start parent) t 1) (line-beginning-position)) ((null node) (apply (alist-get 'prev-sibling treesit-simple-indent-presets) node parent bol nil)) - (t (when-let* ((html-node (treesit-search-forward node "text" t)) + (t (when-let* ((html-node (treesit-search-forward + node + (lambda (node) + (equal (treesit-node-type node) "text")) + t)) (end-html (treesit-node-end html-node))) (goto-char end-html) ;; go to the start of the last tag @@ -622,7 +626,7 @@ characters of the current line." (defun php-ts-mode--anchor-first-sibling (_node parent _bol &rest _) "Return the start of the first child of a sibling of PARENT. -If the fist sibling of PARENT and the first child of the sibling are +If the first sibling of PARENT and the first child of the sibling are on the same line return the start position of the first child of the sibling. Otherwise return the start of the first sibling. PARENT is NODE's parent, BOL is the beginning of non-whitespace @@ -663,12 +667,27 @@ characters of the current line." (treesit-node-prev-sibling prev-sibling))))) (treesit-node-start prev-sibling))) +(defun php-ts-mode--pipe-heuristic (node parent _bol &rest _) + "Return the start of the previous pipe to the current pipe NODE. +Otherwise return the beginning of line of the previous non pipe NODE. + +PARENT is NODE's parent, BOL is the beginning of non-whitespace +characters of the current line." + (save-excursion + (let* ((parent-start (treesit-node-start parent)) + (node-start (treesit-node-start node)) + (bound (progn + (goto-char parent-start) + (beginning-of-line 1) + (point)))) + (goto-char node-start) + (let ((previous-pipe (search-backward "|>" bound t nil))) + (or previous-pipe (+ bound php-ts-mode-indent-offset)))))) + (defun php-ts-mode--indent-styles () "Indent rules supported by `php-ts-mode'." (let ((common `(;; Handle indentation relatives to HTML. - ;; ((parent-is "program") php-ts-mode--parent-html-heuristic 0) - ;; ((parent-is "text_interpolation") php-ts-mode--parent-html-heuristic 0) ((or (parent-is "program") (parent-is "text_interpolation")) php-ts-mode--parent-html-heuristic 0) @@ -709,12 +728,14 @@ characters of the current line." (parent-is "use_list")) parent-bol php-ts-mode-indent-offset) ((parent-is "function_definition") parent-bol 0) - ((parent-is "member_call_expression") first-sibling php-ts-mode-indent-offset) + ((parent-is "member_call_expression") parent-bol php-ts-mode-indent-offset) ((parent-is "conditional_expression") parent-bol php-ts-mode-indent-offset) ((parent-is "assignment_expression") parent-bol php-ts-mode-indent-offset) ((parent-is "array_creation_expression") parent-bol php-ts-mode-indent-offset) ((parent-is "attribute_group") parent-bol php-ts-mode-indent-offset) ((parent-is "parenthesized_expression") first-sibling 1) + + ((node-is "|>") php-ts-mode--pipe-heuristic 0) ((parent-is "binary_expression") parent 0) ((or (parent-is "arguments") (parent-is "formal_parameters")) @@ -742,6 +763,7 @@ characters of the current line." ((parent-is "declaration_list") column-0 php-ts-mode-indent-offset) ((parent-is "initializer_list") parent-bol php-ts-mode-indent-offset) + ((parent-is "property_hook_list") parent-bol php-ts-mode-indent-offset) ;; Statement in {} blocks. ((or (and (or (parent-is "compound_statement") @@ -827,24 +849,66 @@ characters of the current line." ;;; Font-lock -(defconst php-ts-mode--keywords - '("abstract" "and" "array" "as" "break" "callable" "case" "catch" - "class" "clone" "const" "continue" "declare" "default" "do" "echo" - "else" "elseif" "enddeclare" "endfor" "endforeach" "endif" - "endswitch" "endwhile" "enum" "exit" "extends" "final" "finally" "fn" - "for" "foreach" "from" "function" "global" "goto" "if" "implements" - "include" "include_once" "instanceof" "insteadof" "interface" - "list" "match" "namespace" "new" "null" "or" "print" "private" - "protected" "public" "readonly" "require" "require_once" "return" - "static" "switch" "throw" "trait" "try" "unset" "use" "while" "xor" - "yield") +(defun php-ts-mode--test-namespace-name-as-prefix-p () + "Return t if namespace_name_as_prefix is a named node, nil otherwise." + (treesit-query-valid-p 'php "(namespace_name_as_prefix)")) + +(defun php-ts-mode--test-namespace-aliasing-clause-p () + "Return t if namespace_aliasing_clause is a named node, nil otherwise." + (treesit-query-valid-p 'php "(namespace_aliasing_clause)")) + +(defun php-ts-mode--test-namespace-use-group-clause-p () + "Return t if namespace_use_group_clause is a named node, nil otherwise." + (treesit-query-valid-p 'php "(namespace_use_group_clause)")) + +(defun php-ts-mode--test-visibility-modifier-operation-p () + "Return t if (visibility_modifier (operation)) is defined, nil otherwise." + (treesit-query-valid-p 'php "(visibility_modifier (operation))")) + +(defun php-ts-mode--test-property-hook-p () + "Return t if property_hook is a named node, nil otherwise." + (treesit-query-valid-p 'php "(property_hook)")) + +(defun php-ts-mode--test-relative-name-p () + "Return t if relative_name is a named node, nil otherwise." + (treesit-query-valid-p 'php "(relative_name)")) + +(defun php-ts-mode--test-php-end-tag-p () + "Return t if php_end_tag is a named node, nil otherwise." + (treesit-query-valid-p 'php "(php_end_tag)")) + +(defun php-ts-mode--test-yield-from-p () + "Return t if the keyword `yield from' is defined, nil otherwise." + (treesit-query-valid-p 'php '("yield from"))) + +(defun php-ts-mode--test-pipe-p () + "Return t if the operator '|>' is defined, nil otherwise." + (treesit-query-valid-p 'php '("|>"))) + +(defvar php-ts-mode--keywords + (when (treesit-available-p) + (append + '("abstract" "and" "array" "as" "break" "case" "catch" + "class" "clone" "const" "continue" "declare" "default" "do" "echo" + "else" "elseif" "enddeclare" "endfor" "endforeach" "endif" + "endswitch" "endwhile" "enum" "exit" "extends" "final" "finally" "fn" + "for" "foreach" "function" "global" "goto" "if" "implements" + "include" "include_once" "instanceof" "insteadof" "interface" + "list" "match" "namespace" "new" "null" "or" "print" "private" + "protected" "public" "readonly" "require" "require_once" "return" + "static" "switch" "throw" "trait" "try" "unset" "use" "while" "xor" + "yield") + (if (php-ts-mode--test-yield-from-p) '("yield from") '("from")))) "PHP keywords for tree-sitter font-locking.") -(defconst php-ts-mode--operators - '("--" "**=" "*=" "/=" "%=" "+=" "-=" ".=" "<<=" ">>=" "&=" "^=" - "|=" "??" "??=" "||" "&&" "|" "^" "&" "==" "!=" "<>" "===" "!==" - "<" ">" "<=" ">=" "<=>" "<<" ">>" "+" "-" "." "*" "**" "/" "%" - "->" "?->" "...") +(defvar php-ts-mode--operators + (when (treesit-available-p) + (append + '("--" "**=" "*=" "/=" "%=" "+=" "-=" ".=" "<<=" ">>=" "&=" "^=" + "|=" "??" "??=" "||" "&&" "|" "^" "&" "==" "!=" "<>" "===" "!==" + "<" ">" "<=" ">=" "<=>" "<<" ">>" "+" "-" "." "*" "**" "/" "%" + "->" "?->" "...") + (when (php-ts-mode--test-pipe-p) '("|>")))) "PHP operators for tree-sitter font-locking.") (defconst php-ts-mode--predefined-constant @@ -890,30 +954,6 @@ characters of the current line." ("::" . ?∷)) "Value for `prettify-symbols-alist' in `php-ts-mode'.") -(defun php-ts-mode--test-namespace-name-as-prefix-p () - "Return t if namespace_name_as_prefix is a named node, nil otherwise." - (treesit-query-valid-p 'php "(namespace_name_as_prefix)")) - -(defun php-ts-mode--test-namespace-aliasing-clause-p () - "Return t if namespace_aliasing_clause is a named node, nil otherwise." - (treesit-query-valid-p 'php "(namespace_aliasing_clause)")) - -(defun php-ts-mode--test-namespace-use-group-clause-p () - "Return t if namespace_use_group_clause is a named node, nil otherwise." - (treesit-query-valid-p 'php "(namespace_use_group_clause)")) - -(defun php-ts-mode--test-visibility-modifier-operation-p () - "Return t if (visibility_modifier (operation)) is defined, nil otherwise." - (treesit-query-valid-p 'php "(visibility_modifier (operation))")) - -(defun php-ts-mode--test-property-hook-p () - "Return t if property_hook is a named node, nil otherwise." - (treesit-query-valid-p 'php "(property_hook)")) - -(defun php-ts-mode--test-relative-name-p () - "Return t if relative_name is a named node, nil otherwise." - (treesit-query-valid-p 'php "(relative_name)")) - (defun php-ts-mode--font-lock-settings () "Tree-sitter font-lock settings." (treesit-font-lock-rules @@ -974,6 +1014,7 @@ characters of the current line." name: (_) @font-lock-variable-name-face) (scoped_property_access_expression scope: (name) @font-lock-constant-face) + (nullsafe_member_access_expression (name) @font-lock-variable-name-face) (error_suppression_expression (name) @font-lock-property-name-face)) :language 'php @@ -1002,6 +1043,8 @@ characters of the current line." (union_type) @font-lock-type-face (bottom_type) @font-lock-type-face (primitive_type) @font-lock-type-face + ((primitive_type) @font-lock-keyword-face + (:equal "callable" @font-lock-keyword-face)) (cast_type) @font-lock-type-face (named_type) @font-lock-type-face (optional_type) @font-lock-type-face) @@ -1010,7 +1053,9 @@ characters of the current line." :feature 'definition :override t `((php_tag) @font-lock-preprocessor-face - ("?>") @font-lock-preprocessor-face + ,@(if (php-ts-mode--test-php-end-tag-p) + '((php_end_tag) @font-lock-preprocessor-face) + '(("?>") @font-lock-preprocessor-face)) ;; Highlights identifiers in declarations. (class_declaration name: (_) @font-lock-type-face) @@ -1067,9 +1112,9 @@ characters of the current line." '((function_call_expression function: (name) @font-lock-function-call-face) (scoped_call_expression - name: (_) @font-lock-function-call-face) + name: (name) @font-lock-function-call-face) (member_call_expression - name: (_) @font-lock-function-call-face) + name: (name) @font-lock-function-call-face) (nullsafe_member_call_expression name: (_) @font-lock-function-call-face)) @@ -1792,9 +1837,6 @@ The optional TYPE can be the symbol \"port\", \"hostname\", \"document-root\", ;;; Inferior PHP process. -(defvar php-ts-mode--inferior-php-process nil - "The PHP inferior process associated to `php-ts-mode-inferior-php-buffer'.") - ;;;###autoload (defun run-php (&optional cmd config) "Run an PHP interpreter as a inferior process. @@ -1829,8 +1871,7 @@ Optional CONFIG, if supplied, is the php.ini file to use." "Start an inferior PHP process with command CMD and init file CONFIG. CMD is the command to run. Optional CONFIG, if supplied, is the php.ini file to use." - (setq-local php-ts-mode--inferior-php-process - (apply #'make-comint-in-buffer + (apply #'make-comint-in-buffer (string-replace "*" "" php-ts-mode-inferior-php-buffer) php-ts-mode-inferior-php-buffer cmd @@ -1840,7 +1881,7 @@ file to use." (list (when config (format "-c %s" config)) - "-a")))) + "-a"))) (add-hook 'comint-preoutput-filter-functions (lambda (string) (let ((prompt (concat php-ts-mode--inferior-prompt " "))) @@ -1865,7 +1906,7 @@ file to use." nil t) (when php-ts-mode-inferior-history (set-process-sentinel - (get-buffer-process php-ts-mode-inferior-php-buffer) + (get-buffer-process php-ts-mode-inferior-php-buffer) 'php-ts-mode-inferior--write-history))) ;; taken and adapted from lua-ts-mode @@ -1880,14 +1921,15 @@ file to use." (defun php-ts-mode-send-region (beg end) "Send region between BEG and END to the inferior PHP process." (interactive "r") - (if (buffer-live-p php-ts-mode--inferior-php-process) + (if-let* ((php-process + (get-buffer-process php-ts-mode-inferior-php-buffer))) (progn (php-ts-mode-show-process-buffer) - (comint-send-string php-ts-mode--inferior-php-process "\n") + (comint-send-string php-process "\n") (comint-send-string - php-ts-mode--inferior-php-process + php-process (buffer-substring-no-properties beg end)) - (comint-send-string php-ts-mode--inferior-php-process "\n")) + (comint-send-string php-process "\n")) (message "Invoke run-php first!"))) (defun php-ts-mode-send-buffer () commit d02181e39f3bd6ca04445609cdacf44022d18b7c Author: Eli Zaretskii Date: Sat Sep 13 12:06:35 2025 +0300 ; * lisp/emacs-lisp/ring.el (ring-convert-sequence-to-ring): Bug#79330. diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el index 8518753ab20..4f14d607d2a 100644 --- a/lisp/emacs-lisp/ring.el +++ b/lisp/emacs-lisp/ring.el @@ -241,7 +241,9 @@ If the RING is full, behavior depends on GROW-P: (defun ring-convert-sequence-to-ring (seq) "Convert sequence SEQ to a ring, and return the ring. -If SEQ is already a ring, return it." +If SEQ is already a ring, return it. +Members of SEQ that are `equal' to the first member are not inserted, +which will cause the resulting ring to have nil elements." (if (ring-p seq) seq (let* ((size (length seq)) commit 92fa2b60c613c653ecea262a04ab8e7f3a8ff2f9 Author: Eli Zaretskii Date: Sat Sep 13 11:56:15 2025 +0300 Fix 'kill-region' when buffer has been changed outside of Emacs * lisp/subr.el (read-char-choice): Let-bind 'last-command' to prevent it from being overwritten by 'recursive-edit'. (Bug#79388) diff --git a/lisp/subr.el b/lisp/subr.el index 35bb00e0c49..da208d7063f 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3625,7 +3625,13 @@ argument INHIBIT-KEYBOARD-QUIT is ignored. However, if function is used instead (see `read-char-choice-with-read-key'), and INHIBIT-KEYBOARD-QUIT is passed to it." (if (not read-char-choice-use-read-key) - (read-char-from-minibuffer prompt chars) + ;; We are about to enter recursive-edit, which sets + ;; 'last-command'. If the callers of this function have some + ;; logic based on 'last-command's value (example: 'kill-region'), + ;; that could interfere with their logic. So we let-bind + ;; 'last-command' here to prevent that. + (let ((last-command last-command)) + (read-char-from-minibuffer prompt chars)) (read-char-choice-with-read-key prompt chars inhibit-keyboard-quit))) (defun read-char-choice-with-read-key (prompt chars &optional inhibit-keyboard-quit) commit 4d91665367e68400e48bda4d9e50ab23489f62f4 Author: Alcor Date: Mon Aug 25 21:14:40 2025 +0200 Fix parsing single-digit color codes in rcirc * lisp/net/rcirc.el (rcirc-color-attributes) (rcirc-remove-markup-codes): Handle single-digit color codes correctly. diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el index bfa42ee8bb6..a7f1d8bb575 100644 --- a/lisp/net/rcirc.el +++ b/lisp/net/rcirc.el @@ -3130,7 +3130,7 @@ indicated by RESPONSE)." "Highlight IRC color-codes, indicated by ASCII control codes." (while (re-search-forward (rx #x03 - (? (group (= 2 digit)) (? "," (group (= 2 digit)))) + (? (group (** 1 2 digit)) (? "," (group (** 1 2 digit)))) (*? nonl) (or #x03 #x0f eol)) nil t) @@ -3151,7 +3151,7 @@ indicated by RESPONSE)." "Remove ASCII control codes used to designate markup." (while (re-search-forward (rx (or #x02 #x1d #x1f #x1e #x11 #x0f - (: #x03 (? (= 2 digit) (? "," (= 2 digit)))))) + (: #x03 (? (** 1 2 digit) (? "," (** 1 2 digit)))))) nil t) (delete-region (match-beginning 0) (match-end 0)))) commit 603a685ad109af1ccee3369770226f0e34b0c2e9 Author: Spencer Baugh Date: Tue Jul 22 12:13:15 2025 -0400 Allow disabling of reloading files on doc read failure Reloading a byte-compiled file when we fail to fetch some docstring in it is not guaranteed to work and can cause subtle bugs which are worse than simply not having a docstring. Add 'documentation-dynamic-reload' variable to allow disabling this behavior. See the discussion in https://lists.gnu.org/archive/html/emacs-devel/2025-08/msg00304.html for more details. * src/doc.c (syms_of_doc): Add 'documentation-dynamic-reload'. (Fdocumentation, Fdocumentation_property): Check value of 'documentation-dynamic-reload'. diff --git a/src/doc.c b/src/doc.c index 6bc34550d31..996fa97d2f9 100644 --- a/src/doc.c +++ b/src/doc.c @@ -337,7 +337,7 @@ string is passed through `substitute-command-keys'. */) (Lisp_Object function, Lisp_Object raw) { Lisp_Object doc; - bool try_reload = true; + bool try_reload = documentation_dynamic_reload; retry: @@ -410,7 +410,7 @@ This differs from `get' in that it can refer to strings stored in the aren't strings. */) (Lisp_Object symbol, Lisp_Object prop, Lisp_Object raw) { - bool try_reload = true; + bool try_reload = documentation_dynamic_reload; Lisp_Object tem; retry: @@ -717,6 +717,21 @@ program. Use the function `text-quoting-style' instead, as that will compute the correct value for the current terminal in the nil case. */); Vtext_quoting_style = Qnil; + DEFVAR_BOOL ("documentation-dynamic-reload", documentation_dynamic_reload, + doc: /* If non-nil, reload changed `DOC' and Lisp files when calling `documentation'. + +For `etc/DOC' and for files byte-compiled with non-nil +`byte-compile-dynamic-docstring' (the default), documentation strings +are loaded on-demand only when `documentation' is called for a symbol. + +If these files have changed since they were initially loaded, reading +the documentation string for that symbol out of the files may fail. If +it fails, and this variable is non-nil, then the files will be loaded +again to redefine all its functions and variables. `documentation' will +then retry; if the symbol was redefined by reloading the file, reading +the documentation string will then succeed. */); + documentation_dynamic_reload = true; + DEFVAR_BOOL ("internal--text-quoting-flag", text_quoting_flag, doc: /* If nil, a nil `text-quoting-style' is treated as `grave'. */); /* Initialized by ‘main’. */ commit 9430638e48431015f33dfa12bbd26f45a727fb91 Author: Michael Albinus Date: Sat Sep 13 09:22:26 2025 +0200 * lisp/comint.el (comint-password-prompt-regexp): Join two entries. diff --git a/lisp/comint.el b/lisp/comint.el index 5f19a8afbe1..c7315a90181 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -425,9 +425,8 @@ This variable is buffer-local." ;; Default openssh format: "user@host's password:". "\\|^[^@ \t\n]+@[^@ \t\n]+'s password: *\\'" ;; openssh-8.6p1 format: "(user@host) Password:". - "\\|^([^)@ \t\n]+@[^)@ \t\n]+) Password: *\\'" - ;; "(user@host) Password for user@host:" - "\\|^([^)@ \t\n]+@[^)@ \t\n]+) Password for [^)@ \t\n]+@[^)@ \t\n]+: *\\'") + ;; "(user@host) Password for user@host:" (Bug#79424) + "\\|^([^)@ \t\n]+@[^)@ \t\n]+) Password\\(?: for [^)@ \t\n]+@[^)@ \t\n]+\\)?: *\\'") "Regexp matching prompts for passwords in the inferior process. This is used by `comint-watch-for-password-prompt'." :version "31.1" commit fe9b1fa014f7920f26229955b440098277081b72 Author: Andre A. Gomes Date: Sat Sep 13 09:16:25 2025 +0200 Make comint understand SSH proxy password phrases * lisp/comint.el (comint-password-prompt-regexp): * test/lisp/comint-tests.el (comint-testsuite-password-strings): Add SSH proxy password phrase. (Bug#79424) diff --git a/lisp/comint.el b/lisp/comint.el index df1c08c3647..5f19a8afbe1 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -425,7 +425,9 @@ This variable is buffer-local." ;; Default openssh format: "user@host's password:". "\\|^[^@ \t\n]+@[^@ \t\n]+'s password: *\\'" ;; openssh-8.6p1 format: "(user@host) Password:". - "\\|^([^)@ \t\n]+@[^)@ \t\n]+) Password: *\\'") + "\\|^([^)@ \t\n]+@[^)@ \t\n]+) Password: *\\'" + ;; "(user@host) Password for user@host:" + "\\|^([^)@ \t\n]+@[^)@ \t\n]+) Password for [^)@ \t\n]+@[^)@ \t\n]+: *\\'") "Regexp matching prompts for passwords in the inferior process. This is used by `comint-watch-for-password-prompt'." :version "31.1" diff --git a/test/lisp/comint-tests.el b/test/lisp/comint-tests.el index 6b6cc7256ec..d981aad7198 100644 --- a/test/lisp/comint-tests.el +++ b/test/lisp/comint-tests.el @@ -44,6 +44,7 @@ "Password (again):" "Enter password:" "(user@host) Password: " ; openssh-8.6p1 + "(user@host) Password for user@host:" ; (Bug#79424) "Current password:" ; "passwd" (to change password) in Debian. "Enter encryption key: " ; ccrypt "Enter decryption key: " ; ccrypt commit bfeffc443686f0bab9f26c62be25e9bc4058d653 Merge: 59c7ee29dcf 4418a37c5df Author: Michael Albinus Date: Fri Sep 12 16:49:40 2025 +0200 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit 59c7ee29dcf73fdbe15e0a34932e4be43b163101 Author: Michael Albinus Date: Fri Sep 12 16:49:08 2025 +0200 ; Fix last change * test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el: * test/lisp/textmodes/ispell-tests/ispell-tests.el: Fix declare-function. diff --git a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el index 3a442c764d9..cd31cd52d76 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el @@ -34,7 +34,7 @@ (file-name-directory load-file-name)))) (load "ispell-tests-common")) -(declare-function letopt (expand-file-name "ispell-tests-common" source-directory) t t) +(declare-function letopt "ispell-tests-common" t t) (ert-deftest ispell/aspell/ispell-check-version/works () "Test that aspell is correctly detected." diff --git a/test/lisp/textmodes/ispell-tests/ispell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-tests.el index d4012fb5218..d292b390860 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-tests.el @@ -32,7 +32,7 @@ (file-name-directory load-file-name)))) (load "ispell-tests-common")) -(declare-function letopt "ispell-tests-common") +(declare-function letopt "ispell-tests-common" t t) (declare-function ispell-tests--some-backend "ispell-tests-common" t t) (declare-function ispell-tests--some-backend-available-p "ispell-tests-common" t t) commit 4418a37c5df9574d29d0edec8fd02c5330e67be5 Author: Sean Whitton Date: Fri Sep 12 15:41:38 2025 +0100 ; log-edit.el: Insert missing required cl-lib. diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index bbca805fd2b..19f5b7f2296 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -32,6 +32,7 @@ (require 'add-log) ; for all the ChangeLog goodies (require 'pcvs-util) (require 'ring) +(require 'cl-lib) ;;;; ;;;; Global Variables commit 2ee74aca554786c20193b528363eb426e4f7f65c Author: Sean Whitton Date: Fri Sep 12 15:40:35 2025 +0100 Delete obsolete log-edit-beginning-of-line * lisp/vc/log-edit.el (message): No longer require. (log-edit-beginning-of-line): Delete. No longer required now that Log Edit buffers use fields for headers. (In combination with the new fields, this binding led to C-a behaving strangely for summaries with colons in them.) (log-edit-mode-map): Unbind it. diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 2ae8a2eaf4a..bbca805fd2b 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -32,7 +32,6 @@ (require 'add-log) ; for all the ChangeLog goodies (require 'pcvs-util) (require 'ring) -(require 'message) ;;;; ;;;; Global Variables @@ -65,8 +64,7 @@ "M-p" #'log-edit-previous-comment "M-r" #'log-edit-comment-search-backward "M-s" #'log-edit-comment-search-forward - "C-c ?" #'log-edit-mode-help - " " #'log-edit-beginning-of-line) + "C-c ?" #'log-edit-mode-help) (easy-menu-define log-edit-menu log-edit-mode-map "Menu used for `log-edit-mode'." @@ -918,15 +916,6 @@ visible when the *vc-log* buffer pops up." (set-window-dedicated-p (selected-window) t) (selected-window))))) -(defun log-edit-beginning-of-line (&optional n) - "Move point to beginning of header value or to beginning of line. - -It works the same as `message-beginning-of-line', but it uses a -different header separator appropriate for `log-edit-mode'." - (interactive "p") - (let ((mail-header-separator "")) - (message-beginning-of-line n))) - (defun log-edit-empty-buffer-p () "Return non-nil if the buffer is \"empty\"." (or (= (point-min) (point-max)) commit 85b991a62da7f188088bfedebd63957fe5f8acf3 Author: Sean Whitton Date: Fri Sep 12 15:32:19 2025 +0100 ; vc-git--log-edit-summary-check: Use and-let*. diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 5e2f0e5bb20..eb2f6037dbd 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -1083,21 +1083,21 @@ If toggling on, also insert its message into the buffer." "C-c C-e" #'vc-git-log-edit-toggle-amend) (defun vc-git--log-edit-summary-check (limit) - (and (re-search-forward "^Summary: " limit t) - (when-let* ((regex - (cond ((and (natnump vc-git-log-edit-summary-max-len) - (natnump vc-git-log-edit-summary-target-len)) - (format ".\\{,%d\\}\\(.\\{,%d\\}\\)\\(.*\\)" - vc-git-log-edit-summary-target-len - (- vc-git-log-edit-summary-max-len - vc-git-log-edit-summary-target-len))) - ((natnump vc-git-log-edit-summary-max-len) - (format ".\\{,%d\\}\\(?2:.*\\)" - vc-git-log-edit-summary-max-len)) - ((natnump vc-git-log-edit-summary-target-len) - (format ".\\{,%d\\}\\(.*\\)" - vc-git-log-edit-summary-target-len))))) - (re-search-forward regex limit t)))) + (and-let* (((re-search-forward "^Summary: " limit t)) + (regex + (cond ((and (natnump vc-git-log-edit-summary-max-len) + (natnump vc-git-log-edit-summary-target-len)) + (format ".\\{,%d\\}\\(.\\{,%d\\}\\)\\(.*\\)" + vc-git-log-edit-summary-target-len + (- vc-git-log-edit-summary-max-len + vc-git-log-edit-summary-target-len))) + ((natnump vc-git-log-edit-summary-max-len) + (format ".\\{,%d\\}\\(?2:.*\\)" + vc-git-log-edit-summary-max-len)) + ((natnump vc-git-log-edit-summary-target-len) + (format ".\\{,%d\\}\\(.*\\)" + vc-git-log-edit-summary-target-len))))) + (re-search-forward regex limit t))) (define-derived-mode vc-git-log-edit-mode log-edit-mode "Log-Edit/git" "Major mode for editing Git log messages. commit 2817720083fd80c467d54b5a10b9853e3b034337 Author: Sean Whitton Date: Fri Sep 12 15:31:56 2025 +0100 ; vc-prepare-patch: Minor code improvements * lisp/vc/vc.el (vc-prepare-patch): Use ngettext. Avoid using dolist's RESULT for side-effect. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 5dcbc922dbe..44a2c143b87 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -4257,19 +4257,22 @@ marked revisions, use those." 'prepare-patch rev)) revisions))) (if vc-prepare-patches-separately - (dolist (patch (reverse patches) - (message "Prepared %d patch%s..." (length patches) - (if (length> patches 1) "es" ""))) - (compose-mail addressee - (plist-get patch :subject) - nil nil nil nil - `((kill-buffer ,(plist-get patch :buffer)))) - (rfc822-goto-eoh) (forward-line) - (save-excursion ;don't jump to the end - (insert-buffer-substring - (plist-get patch :buffer) - (plist-get patch :body-start) - (plist-get patch :body-end)))) + (cl-loop with l = (length patches) + for patch in (reverse patches) do + (compose-mail addressee + (plist-get patch :subject) + nil nil nil nil + `((kill-buffer ,(plist-get patch :buffer)))) + (rfc822-goto-eoh) (forward-line) + (save-excursion ;don't jump to the end + (insert-buffer-substring + (plist-get patch :buffer) + (plist-get patch :body-start) + (plist-get patch :body-end))) + finally (message (ngettext "Prepared %d patch..." + "Prepared %d patches..." + l) + l)) (compose-mail addressee subject nil nil nil nil (mapcar (lambda (p) commit 1372061200273e424ca678d1f0536496ac54e96f Author: Sean Whitton Date: Fri Sep 12 15:26:44 2025 +0100 ; vc-diff-outgoing: Fix calling 'working-revision' backend function. diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 1f27f418cf5..2ae8a2eaf4a 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -898,7 +898,7 @@ visible when the *vc-log* buffer pops up." (save-selected-window (let ((display-buffer-overriding-action '(nil . ((inhibit-same-window . t))))) - (funcall log-edit-diff-function))))) + (funcall log-edit-diff-function))))) (defun log-edit-show-files () "Show the list of files to be committed." diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 68a3edddd54..5dcbc922dbe 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2652,9 +2652,9 @@ global binding." ;; 'repository) ;; (ignore-errors ;; (vc-call-backend backend 'working-revision - ;; (car fileset))) + ;; (caadr fileset))) (vc-call-backend backend 'working-revision - (car fileset)) + (caadr fileset)) (called-interactively-p 'interactive)))) ;; For the following two commands, the default meaning for commit 1b4e4fda5ea3364f752b20bef0147001ae58ab97 Author: Michael Albinus Date: Fri Sep 12 16:18:26 2025 +0200 Fix last change * test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el: * test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el: * test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el: * test/lisp/textmodes/ispell-tests/ispell-tests.el: Fix load argument. diff --git a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el index 66451bf4548..3a442c764d9 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el @@ -32,9 +32,9 @@ (add-to-list 'load-path (when (not (null load-file-name)) (directory-file-name (file-name-directory load-file-name)))) - (load "ispell-tests-common.el")) + (load "ispell-tests-common")) -(declare-function letopt (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-common.el" source-directory) t t) +(declare-function letopt (expand-file-name "ispell-tests-common" source-directory) t t) (ert-deftest ispell/aspell/ispell-check-version/works () "Test that aspell is correctly detected." diff --git a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el index 8b625276e28..79d7dbbc677 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el @@ -32,7 +32,7 @@ (add-to-list 'load-path (when (not (null load-file-name)) (directory-file-name (file-name-directory load-file-name)))) - (load "ispell-tests-common.el")) + (load "ispell-tests-common")) (ert-deftest ispell/hunspell/ispell-word/english/check-only () "This test checks that Russian spellchecking works for Hunspell." diff --git a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el index 30df3a3340a..74c56de6857 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el @@ -29,7 +29,7 @@ (add-to-list 'load-path (and load-file-name (directory-file-name (file-name-directory load-file-name)))) - (load "ispell-tests-common.el")) + (load "ispell-tests-common")) (ert-deftest ispell/international-ispell/ispell-word/russian/check-only () "This test checks that Russian spellchecking works for. diff --git a/test/lisp/textmodes/ispell-tests/ispell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-tests.el index b711ee59793..d4012fb5218 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-tests.el @@ -30,7 +30,7 @@ (add-to-list 'load-path (when (not (null load-file-name)) (directory-file-name (file-name-directory load-file-name)))) - (load "ispell-tests-common.el")) + (load "ispell-tests-common")) (declare-function letopt "ispell-tests-common") (declare-function ispell-tests--some-backend "ispell-tests-common" t t) commit 4846ec48714171eabc51929feebe03b9603713b7 Author: Lockywolf Date: Fri Sep 12 16:02:48 2025 +0200 Add tests to ispell.el interactive functions * lisp/textmodes/ispell.el (ispell-accept-output): Fix variable init. * test/lisp/textmodes/ispell-resources/fake-aspell-new.bash: Update mock aspell to be able to serve all tests. * test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el: (ispell/aspell/ispell-word/english/correct): Implement. (ispell/aspell/ispell-word/english/incorrect): Implement. (ispell/aspell/ispell-word/english/wrong-language): Implement. * test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el Fix byte compilation errors. * test/lisp/textmodes/ispell-international-ispell-tests.el Fix byte compilation errors. * test/lisp/textmodes/ispell-tests/ispell-tests-common.el (with-ispell-global-dictionary): Implement a macro to set and restore ispell.el's global dictionary. * test/lisp/textmodes/ispell-tests/ispell-tests.el: (ispell/ispell-buffer-local-words/ispell-words-keyword): Fix CI run. (ispell/ispell-accept-buffer-local-defs/simple): Fix skip condition. (ispell/ispell--run-on-word/default): Fix skip condition. (ispell/ispell-word/default/check-only/correct): Fix global variable. (ispell/ispell-word/default/check-only/correct/add-init): Fix global variable. (ispell/ispell-word/default/check-only/incorrect): Fix skip condition. (ispell/ispell-region/incorrect): Fix postcondition. (ispell/ispell-call-process/simple): Fix emacs path. (ispell/ispell-call-process/simple-writable): Fix emacs path. (ispell/ispell-call-process-region/cat-empty): Fix emacs path. (ispell/ispell-call-process-region/cat-random): Fix emacs path. (ispell/ispell-kill-ispell): Implement. (ispell/ispell/buffer): Implement. (ispell/ispell/region): Implement. (ispell/ispell-change-dictionary): Implement. (ispell/ispell-comments-and-strings/correct): Implement. (ispell/ispell-comments-and-strings/incorrect): Implement. (ispell/ispell-comment-or-string-at-point): Implement. (ispell/ispell-pdict-save): Implement. (ispell/ispell-pdict-save/force): Implement. (ispell/ispell-pdict-save/modified): Implement. (ispell/ispell-pdict-save/unmodified): Implement. (ispell/ispell-lookup-words/simple): Implement. (ispell/ispell-complete-word/ispell-completion-at-point): Implement. (ispell/ispell-complete-word-interior-frag/simple): Implement. (ispell/ispell-minor-mode/simple): Implement. (ispell/ispell-message/correct): Implement. (ispell/ispell-message/incorrect): Implement. diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index ad7c8571f67..b37d07f5e62 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -1803,7 +1803,8 @@ and pass it the output of the last Ispell invocation." (if (null ispell-process) (error "No Ispell process to read output from!") (let ((buf ispell-output-buffer) - ispell-output) + (ispell-output nil)) + (if (not (bufferp buf)) (setq ispell-filter nil) (with-current-buffer buf diff --git a/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash b/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash index 7dd935bac3c..1eb004f6ba6 100755 --- a/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash +++ b/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash @@ -1,5 +1,20 @@ #!/bin/bash +#exec aspell "$@" + +#rm -rf ~/lwf_mock-aspell.log + +#printf 'date="%s"\n' "$(date --iso=seconds)" > /tmp/lwf_mock-aspell.log + +#printf 'args="%s"\n' "$*" >> /tmp/lwf_mock-aspell.log || { printf "lwf:ERROR\n" ; exit 3 ; } + +# coproc aspell { aspell "$@" ; } + +if [[ "$HOME" == '' ]] ; then + echo "HOME is unset. Aspell usually fails in such a case\n" 1>2 + exit 3 +fi + vv= show_vv() @@ -7,13 +22,51 @@ show_vv() printf '%s\n' "@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.0)" } -imitate_repl() +imitate_pipe() { + local a + declare -A sessiondict + show_vv + while read a ; do + #printf 'pipe="%s"\n' "$a" >> /tmp/lwf_mock-aspell.log + if [[ "$a" == '' ]] ; then + printf '' + elif [[ "$a" == '+' || "$a" == '~nroff' || "$a" == '~tex' || "$a" == '!' || "$a" == '-' || "$a" == '%' ]] ; then + printf '' + elif [[ "${a:0:1}" == '@' ]] ; then + sessiondict["${a:1}"]="true" + printf '' + else + for b in $a ; do + if [[ "$b" == '^' ]] ; then + printf '' + elif [[ ${sessiondict[$b]} == 'true' || ${sessiondict[${b#^}]} == 'true' ]] ; then + printf '*\n' + elif [[ "$b" == '^tarampampamtararam' || "$b" == 'tarampampamtararam' ]] ; then + printf '# tarampampamtararam 0\n' # wrong word + elif [[ "$b" == '^badworddd' || "$b" == 'badworddd' ]] ; then + printf '# badworddd 0\n' # wrong word + elif [[ "$b" == '^hellooooooo' || "$b" == 'hellooooooo' ]] ; then + printf '# hellooooooo 0\n' # wrong word + elif [[ "$b" == '^' ]] ; then + printf '\n' + else + printf "*\n" + fi + done + printf '\n' + fi + done +} + +imitate_interactive() +{ + exit 6 while true ; do read a -# printf 'debug="%s"\n' "$a" +# printf 'interactive="%s"\n' "$a" >> /tmp/lwf_mock-aspell.log if [[ "$a" == '' ]] ; then - printf '' + printf '\n' elif [[ "$a" == 'tarampampamtararam' ]] ; then printf '# tarampampamtararam 0\n\n' # wrong word else @@ -22,16 +75,16 @@ imitate_repl() done } -show_vv while :; do case $1 in -vv|-v) - #show_vv # for ispell.el error detection + show_vv # for ispell.el version detection exit ;; -a) # imitate REPL - imitate_repl + imitate_pipe + exit ;; -?*) printf 'WARN: Unknown option (ignored): %s\n' "$1" >&2 @@ -41,3 +94,7 @@ while :; do esac shift done + +printf 'Usage: aspell [options] \n' + +#printf 'this place should be unreachable\n' >> /tmp/lwf_mock-aspell.log diff --git a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el index c24d284f426..66451bf4548 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el @@ -25,8 +25,16 @@ ;;; Code: (require 'ispell) +(require 'ert) +(require 'ert-x) -(load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-common.el" source-directory)) +(eval-and-compile + (add-to-list 'load-path (when (not (null load-file-name)) + (directory-file-name + (file-name-directory load-file-name)))) + (load "ispell-tests-common.el")) + +(declare-function letopt (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-common.el" source-directory) t t) (ert-deftest ispell/aspell/ispell-check-version/works () "Test that aspell is correctly detected." @@ -68,6 +76,106 @@ (set-variable 'ispell-last-program-name test-saved-ispell-last-program-name))))) +(ert-deftest ispell/aspell/ispell-word/english/correct () +"This test checks that Russian spellchecking works for Aspell." + (skip-unless (executable-find "aspell")) + (skip-unless (equal + 0 + (call-process "aspell" nil nil nil "-vv"))) + (skip-unless (equal + 0 + (with-temp-buffer + (insert "test") + (call-process-region + nil + nil + "aspell" nil t nil "-a" "-denglish")))) + (with-environment-variables (("HOME" temporary-file-directory)) + (let ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name "aspell") + (ispell-dictionary "english")) + (ignore-errors (ispell-kill-ispell t t)) + (with-temp-buffer + (insert + "hello\n") + (goto-char 0) + (ispell-change-dictionary "english") + (let ((debugmessage "")) + (ert-with-message-capture lres + (let ((ispell-check-only t)) + (ispell-word) + (setf debugmessage lres) + ;;(should (string-match "is correct" lres)) + )) + (message "lwf:lres=%s" debugmessage))) + 'passed + ))) + ) + +(ert-deftest ispell/aspell/ispell-word/english/incorrect () +"This test checks that Russian spellchecking works for Aspell." + (skip-unless (executable-find "aspell")) + (skip-unless (equal + 0 + (call-process "aspell" nil nil nil "-vv"))) + (skip-unless (equal + 0 + (with-temp-buffer + (insert "test") + (call-process-region + nil + nil + "aspell" nil t nil "-a" "-denglish")))) + (with-environment-variables (("HOME" temporary-file-directory)) + (let ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name "aspell") + (ispell-dictionary "english")) + (ignore-errors (ispell-kill-ispell t t)) + (with-temp-buffer + (insert + ;; there is no such a word in English, I swear. + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" + ) + (goto-char 0) + (ispell-change-dictionary "english") + (ert-with-message-capture lres + (let ((ispell-check-only t)) + (ispell-word)) + (should (string-match "is incorrect" lres)))) + 'passed + ))) + ) + +(ert-deftest ispell/aspell/ispell-word/english/wrong-language () + "This test checks that Russian spellchecking works for Aspell." + :expected-result :failed + (skip-unless (executable-find "aspell")) + (skip-unless (equal + 0 + (call-process "aspell" nil nil nil "-vv"))) + (skip-unless (equal + 0 + (with-temp-buffer + (insert "test") + (call-process-region nil nil "aspell" nil '("*scratch*" t) nil "-a" "-denglish")))) + (with-environment-variables (("HOME" temporary-file-directory)) + (let ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name "aspell")) + (ignore-errors (ispell-kill-ispell t t)) + (with-temp-buffer + (insert + ;; giving Aspell a wrong language should not fail + "привет\n" + ) + (goto-char 0) + (ispell-change-dictionary "english") + (ert-with-message-capture lres + (let ((ispell-check-only t)) + (ispell-word)) + (should (not (string-match "Error" lres))))) + 'passed + ))) + ) (provide 'tests-ispell-aspell) ;;; tests-ispell-aspell.el ends here diff --git a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el index ae3d6e303b3..8b625276e28 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el @@ -25,8 +25,15 @@ ;;; Code: (require 'ispell) +(require 'ert) +(require 'ert-x) + +(eval-and-compile + (add-to-list 'load-path (when (not (null load-file-name)) + (directory-file-name + (file-name-directory load-file-name)))) + (load "ispell-tests-common.el")) -(load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-common.el" source-directory)) (ert-deftest ispell/hunspell/ispell-word/english/check-only () "This test checks that Russian spellchecking works for Hunspell." (skip-unless (executable-find "hunspell")) diff --git a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el index f232f26d10d..30df3a3340a 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el @@ -25,8 +25,11 @@ ;;; Code: (require 'ispell) - -(load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-common.el" source-directory)) +(eval-and-compile + (add-to-list 'load-path (and load-file-name + (directory-file-name + (file-name-directory load-file-name)))) + (load "ispell-tests-common.el")) (ert-deftest ispell/international-ispell/ispell-word/russian/check-only () "This test checks that Russian spellchecking works for. diff --git a/test/lisp/textmodes/ispell-tests/ispell-tests-common.el b/test/lisp/textmodes/ispell-tests/ispell-tests-common.el index a6c4f1247ee..0692e11e567 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-tests-common.el +++ b/test/lisp/textmodes/ispell-tests/ispell-tests-common.el @@ -1,21 +1,43 @@ ;;; common.el --- -*- lexical-binding: t; -*- +;; (defvar tests-ispell-data-directory +;; (expand-file-name "test/lisp/textmodes/ispell-resources/" source-directory)) +(require 'ert) +(require 'ert-x) + (defvar tests-ispell-data-directory - (expand-file-name "test/lisp/textmodes/ispell-resources/" source-directory)) + (let ((ert-resource-directory-trim-right-regexp "-tests/.*-tests-common\\.el")) + (ert-resource-directory))) + +;;(message "lwf:tests-ispell-data-directory=%s" tests-ispell-data-directory) + +(defvar fake-aspell-path + (expand-file-name "fake-aspell-new.bash" tests-ispell-data-directory)) + -(let* ((backend-binaries (list "ispell" "aspell" "hunspell" "enchant-2")) - (filter-binaries (lambda () - (seq-filter - #'executable-find - backend-binaries)))) +(let* ((backend-binaries (list "ispell" "aspell" "hunspell" "enchant-2" fake-aspell-path) + ) + (filter-binaries (seq-filter + (lambda (b) + (and + (executable-find b) + ;; (equal 0 + ;; (with-temp-buffer + ;; (call-process b nil t "-v"))) + )) + backend-binaries))) (defun ispell-tests--some-backend-available-p () (not - (null (funcall filter-binaries)))) + (null filter-binaries))) (defun ispell-tests--some-backend () - (car (funcall filter-binaries)))) + (let ((retval (car filter-binaries))) + (message "available backend is:%s" retval) + retval))) +(eval-when-compile + (require 'cl-macs)) (cl-defmacro letopt (bindings &body body) (declare (indent 1)) (let* ((binding-var (lambda (binding) (car binding))) @@ -33,4 +55,18 @@ ,@body) ,@(reverse restorebindings))))) +(cl-defmacro with-ispell-global-dictionary (bindings &body body) + "This macro should not really be needed, but `ispell.el'. +Sets up dictionaries in a stupid way." + (declare (indent 1)) + (let* ((dictionary-val (car bindings)) + (temp-var (gensym 'old-dictionary))) + `(let ((,temp-var (symbol-value 'ispell-dictionary))) + (unwind-protect (progn (ispell-change-dictionary ,dictionary-val t) + ,@body) + (progn + (unwind-protect + (ispell-change-dictionary ,temp-var t) + (message "restoring original dictionary failed"))))))) + (provide 'ispell-tests-common) diff --git a/test/lisp/textmodes/ispell-tests/ispell-tests.el b/test/lisp/textmodes/ispell-tests/ispell-tests.el index 9e675443986..b711ee59793 100644 --- a/test/lisp/textmodes/ispell-tests/ispell-tests.el +++ b/test/lisp/textmodes/ispell-tests/ispell-tests.el @@ -24,9 +24,24 @@ ;;; Code: + (require 'ispell) -(load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-common.el" source-directory)) +(eval-and-compile + (add-to-list 'load-path (when (not (null load-file-name)) + (directory-file-name + (file-name-directory load-file-name)))) + (load "ispell-tests-common.el")) + +(declare-function letopt "ispell-tests-common") +(declare-function ispell-tests--some-backend "ispell-tests-common" t t) +(declare-function ispell-tests--some-backend-available-p "ispell-tests-common" t t) + + +(defconst ispell-tests-emacs-binary-path + (concat invocation-directory invocation-name)) +(require 'ert) +(require 'ert-x) (defun warnings-buffer-exists-p () "Check if a buffer named \"*Warnings*\" exists." @@ -134,7 +149,7 @@ the backend's process exists." (should (with-temp-buffer (let ((default-directory "86e44985-cfba-43ba-98dc-73be46addbc2")) - (ispell-call-process "emacs" nil t nil '("--batch" "-Q" "--eval" "(progn (message default-directory) (kill-emacs))")) + (ispell-call-process ispell-tests-emacs-binary-path nil t nil "--batch" "-Q" "--eval" "(progn (message default-directory) (kill-emacs))") (search-backward (expand-file-name "~")))))) (ert-deftest ispell/ispell-call-process/simple-writable () @@ -142,7 +157,9 @@ the backend's process exists." (should (with-temp-buffer (let ((default-directory temporary-file-directory)) - (ispell-call-process "emacs" nil t nil "--batch" "-Q" "--eval" "(message default-directory)") + (ispell-call-process + ispell-tests-emacs-binary-path nil t nil "--batch" "-Q" + "--eval" "(message \"%s\" (expand-file-name default-directory))") (search-backward (directory-file-name temporary-file-directory)))))) (ert-deftest ispell/ispell-call-process-region/cat-empty () @@ -161,7 +178,7 @@ makes it useless." (chmod dir 000) (let ((default-directory dir)) ;; (ispell-call-process-region string-to-send nil "cat" nil t nil) - (ispell-call-process-region "emacs" nil t nil "--batch" "-Q" "--eval" "(progn (setq this-read (ignore-errors (read-from-minibuffer \"\"))) (message \"%s\" this-read))") + (ispell-call-process-region ispell-tests-emacs-binary-path nil t nil "--batch" "-Q" "--eval" "(progn (setq this-read (ignore-errors (read-from-minibuffer \"\"))) (message \"%s\" this-read))") ;; emacs --batch --eval '(progn (setq this-read (ignore-errors (read-from-minibuffer ""))) (message "%s" this-read))' (equal (buffer-string) string-to-send)))))) @@ -176,7 +193,7 @@ makes it useless." (with-temp-buffer (let ((string-to-send (format "%s" (random))) (default-directory "86e44985-cfba-43ba-98dc-73be46addbc2")) - (ispell-call-process-region "emacs" nil t nil "--batch" "-Q" "--eval" "(progn (setq this-read (ignore-errors (read-from-minibuffer \"\"))) (message \"%s\" this-read))") + (ispell-call-process-region ispell-tests-emacs-binary-path nil t nil "--batch" "-Q" "--eval" "(progn (setq this-read (ignore-errors (read-from-minibuffer \"\"))) (message \"%s\" this-read))") (equal (buffer-string) string-to-send))))) (ert-deftest ispell/ispell-create-debug-buffer () @@ -450,18 +467,20 @@ nXML comments." Should pass regardless of the backend and the dictionary, because presumably nobody will have `hellooooooo' in their dictionary." (skip-unless (ispell-tests--some-backend-available-p)) - (letopt ((ispell-program-name (ispell-tests--some-backend))) - (with-temp-buffer - (nxml-mode) - (ignore-errors (ispell-kill-ispell)) - (with-environment-variables (("HOME" temporary-file-directory)) - (ispell-init-process) - (let ((test-output (ispell--run-on-word "hellooooooo"))) - (should (listp test-output)) - (should-not (equal t test-output))) - (ispell-add-per-file-word-list "hellooooooo") - (ispell-buffer-local-words) - (should (equal t (ispell--run-on-word "hellooooooo"))))))) + (with-environment-variables (("HOME" temporary-file-directory)) + (with-ispell-global-dictionary nil + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (nxml-mode) + (ignore-errors (ispell-kill-ispell)) + (ispell-init-process) + (let ((test-output (ispell--run-on-word "hellooooooo"))) + (should (listp test-output)) + (should-not (equal t test-output))) + (ispell-add-per-file-word-list "hellooooooo") + (ispell-buffer-local-words) + (should (equal t (ispell--run-on-word "hellooooooo"))))))) + ) (ert-deftest @@ -470,35 +489,44 @@ presumably nobody will have `hellooooooo' in their dictionary." Should pass regardless of the backend and the dictionary, because presumably nobody will have `hellooooooo' in their dictionary." (skip-unless (ispell-tests--some-backend-available-p)) - (letopt ((ispell-program-name (ispell-tests--some-backend))) - (cd temporary-file-directory) - (with-temp-buffer - (nxml-mode) - (ignore-errors (ispell-kill-ispell)) - (with-environment-variables (("HOME" temporary-file-directory)) - (ispell-init-process) - (let ((test-output (ispell--run-on-word "hellooooooo"))) - (should (listp test-output)) - (should-not (equal t test-output))) - (let ((ispell-buffer-session-localwords (list "hellooooooo"))) - (ispell-buffer-local-words) - (should (equal t (ispell--run-on-word "hellooooooo")))))))) - -(ert-deftest ispell/ispell-init-process/works-nohome () + (with-environment-variables (("HOME" temporary-file-directory)) + (with-ispell-global-dictionary nil + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil)) + (cd temporary-file-directory) + (with-temp-buffer + (nxml-mode) + (ignore-errors (ispell-kill-ispell)) + (ispell-init-process) + (let ((test-output (ispell--run-on-word "hellooooooo"))) + (should (listp test-output)) + (should-not (equal t test-output))) + (let ((ispell-buffer-session-localwords (list "hellooooooo"))) + (ispell-buffer-local-words) + (should (equal t (ispell--run-on-word "hellooooooo")))))))) + ) + +(ert-deftest ispell/ispell-init-process/works-no-home () "Simple test to check that ispell-init-process works." :expected-result :failed (skip-unless (ispell-tests--some-backend-available-p)) - (letopt ((ispell-program-name (ispell-tests--some-backend))) - (with-temp-buffer + (with-ispell-global-dictionary nil + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (with-environment-variables + (("HOME" (make-temp-name temporary-file-directory))) (ispell-init-process)))) + 'passed) +) -(ert-deftest ispell/ispell-init-process/works-withhome () +(ert-deftest ispell/ispell-init-process/works-with-home () "Simple test to check that ispell-init-process works." (skip-unless (ispell-tests--some-backend-available-p)) - (letopt ((ispell-program-name (ispell-tests--some-backend))) - (with-temp-buffer - (with-environment-variables (("HOME" temporary-file-directory)) - (ispell-init-process))))) + (with-ispell-global-dictionary nil + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (with-environment-variables (("HOME" temporary-file-directory)) + (ispell-init-process)))))) ;; Some more tests for buffer-local stuff. ;; `ispell-buffer-local-dict' @@ -742,18 +770,17 @@ mode from the dictionary." batch mode. 1. local words 2. dictionary and pdict -3. parser and extcharmode" - (skip-unless (executable-find "ispell")) - (setq old-engine ispell-program-name) - (setopt ispell-program-name "ispell") - (ispell-check-version t) - (skip-unless (and (null ispell-really-aspell) - (null ispell-really-hunspell) - (null ispell-really-enchant))) - (setq ispell-program-name old-engine) +3. parser and extcharmode. +This does not work well on hunspell, because hunspell +lies in their Man page, and in enchant-2 when it is using +hunspell. Hence skipping." + (skip-unless (not (or (equal (ispell-tests--some-backend) + "hunspell") + (equal (ispell-tests--some-backend) + "enchant-2")))) (with-environment-variables (("HOME" temporary-file-directory)) (with-temp-buffer - (letopt ((ispell-program-name "ispell")) + (letopt ((ispell-program-name (ispell-tests--some-backend))) (let ((test-dictname "english") (test-extcharmode "~latin3") (test-parser "~testparser") @@ -806,9 +833,6 @@ batch mode. "`ispell--run-on-word' should be the simplest interface for checking a word." (skip-unless (ispell-tests--some-backend-available-p)) - (skip-unless (equal - 0 - (call-process (ispell-tests--some-backend) nil nil nil "-vv"))) (letopt ((ispell-program-name (ispell-tests--some-backend)) (ispell-dictionary "default")) (let ((default-directory temporary-file-directory)) @@ -890,21 +914,18 @@ be rewritten with a mock." (call-process (ispell-tests--some-backend) nil nil nil "-vv"))) (with-environment-variables (("HOME" temporary-file-directory)) (let ((default-directory temporary-file-directory)) - (letopt ((ispell-program-name (ispell-tests--some-backend))) + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil)) (ignore-errors (ispell-kill-ispell t t)) (with-temp-buffer (insert "hello\n") (goto-char 0) - (let ((ispell-check-only t) - (current-point - (with-current-buffer "*Messages*" - (point)))) + (ert-with-message-capture lres (ispell-word) - (with-current-buffer "*Messages*" - (goto-char (point-max)) - (should ( > (search-backward "is correct" nil t) - current-point))))))))) + (should (string-match "is correct" lres)))) + 'passed))) + ) (ert-deftest ispell/ispell-word/default/check-only/correct/add-init () "Check that `ispell-word' works with a default @@ -920,23 +941,21 @@ like to test it explicitly." (call-process (ispell-tests--some-backend) nil nil nil "-vv"))) (with-environment-variables (("HOME" temporary-file-directory)) (let ((default-directory temporary-file-directory)) - (letopt ((ispell-program-name (ispell-tests--some-backend))) + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil) + (ispell-check-only t)) (ignore-errors (ispell-kill-ispell t t)) (with-temp-buffer (ispell-init-process) ;; this is added (insert "hello\n") (goto-char 0) - (let ((ispell-check-only t) - (current-point - (with-current-buffer "*Messages*" - (point)))) + (ert-with-message-capture lres (ispell-word) - (with-current-buffer "*Messages*" - (goto-char (point-max)) - (should (> (search-backward "is correct" nil t) - current-point))) - )))))) + (should (string-match "is correct" lres))) + 'passed + )))) + ) (ert-deftest ispell/ispell-word/default/check-only/incorrect () "Check that `ispell-word' works with a default @@ -945,75 +964,110 @@ Ispell ships it. This is probably wrong and should be rewritten with a mock. This test gives it a word which does not exist." (skip-unless (ispell-tests--some-backend-available-p)) - (skip-unless (equal - 0 - (call-process (ispell-tests--some-backend) nil nil nil "-vv"))) (with-environment-variables (("HOME" temporary-file-directory)) (let ((default-directory temporary-file-directory)) - (letopt ((ispell-program-name (ispell-tests--some-backend))) + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil) + (ispell-check-only t)) (ignore-errors (ispell-kill-ispell t t)) (with-temp-buffer (insert - "helloooo\n") + "hellooooooo\n") (goto-char 0) - (let ((ispell-check-only t) - (current-point - (with-current-buffer "*Messages*" - (point)))) + (ert-with-message-capture lres (ispell-word) - (with-current-buffer "*Messages*" - (goto-char (point-max)) - (should (> (search-backward "is incorrect" nil t) - current-point))) - )))))) + (should (string-match "is incorrect" lres)) + 'passed))))) + ) (ert-deftest ispell/ispell-region/correct () "The simplest test for `ispell-region'." (skip-unless (ispell-tests--some-backend-available-p)) - (skip-unless (equal - 0 - (call-process (ispell-tests--some-backend) nil nil nil "-vv"))) (with-environment-variables (("HOME" temporary-file-directory)) (let* ((default-directory temporary-file-directory) - (fake-aspell-path (expand-file-name - "./fake-aspell-new.bash" - tests-ispell-data-directory)) (words '("hello" "test" "test" "more" "obvious" "word")) (text (string-join words " "))) - (letopt ((ispell-program-name fake-aspell-path)) + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil)) (ignore-errors (ispell-kill-ispell t t)) (with-temp-buffer - (insert - text) + (insert text) + (goto-char (length (nth 0 words))) + (ert-with-message-capture lres + (ispell-region (point) (point-max)) + (should (string-match "^Spell-checking region using .* with .* dictionary...done" lres)) + 'passed))))) + ) + + + +(ert-deftest ispell/ispell-region/incorrect () + "The simplest test for `ispell-region'." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory) + (words '("hello" "tarampampamtararam" "world")) + (text (string-join words " "))) + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil) + (ispell-check-only t)) + (ignore-errors (ispell-kill-ispell t t)) + (with-temp-buffer + (insert text) + (goto-char (length (nth 0 words))) + (cl-labels ((checker () + (user-error "expected error"))) + (unwind-protect + (progn + (advice-add 'ispell-show-choices :override #'checker) + (should-error (ispell-region (point) (point-max)))) + (advice-remove 'ispell-show-choices #'checker)))) + 'passed))) + ) + +(ert-deftest ispell/ispell-buffer/correct () + "The simplest test for `ispell-buffer'. +`ispell-buffer' is a very simple wrapper around `ispell-region', +so this test virtually mirrors the previous one." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory) + (words '("hello" "test" "test" "more" "obvious" "word")) + (text (string-join words " "))) + (letopt ((ispell-dictionary nil) + (ispell-program-name (ispell-tests--some-backend))) + (ignore-errors (ispell-kill-ispell t t)) + (with-temp-buffer + (insert text) (goto-char (length (nth 0 words))) - (let (;(ispell-check-only t) - (current-point + (let ((current-point (with-current-buffer "*Messages*" (point)))) - (ispell-region (point) (point-max)) + (ispell-buffer) (with-current-buffer "*Messages*" (goto-char (point-max)) - (should (> (re-search-backward "Spell-checking region using .* with .* dictionary...done" nil t) current-point)) + (should (> (re-search-backward "^Spell-checking .* using .* with .* dictionary...done" nil t) current-point)) 'passed) ))))) ) -(ert-deftest ispell/ispell-region/incorrect () - "The simplest test for `ispell-region'." +(ert-deftest ispell/ispell-buffer/incorrect () + "The simplest test for `ispell-buffer'. +`ispell-buffer' is a very simple wrapper around `ispell-region', +so this test virtually mirrors the previous one." (skip-unless (ispell-tests--some-backend-available-p)) - (skip-unless (equal - 0 - (call-process (ispell-tests--some-backend) nil nil nil "-vv"))) (with-environment-variables (("HOME" temporary-file-directory)) (let* ((default-directory temporary-file-directory) - (fake-aspell-path "aspell") - (words '("hello" "tarampampamtararam" "world")) + (words '("tarampampamtararam" "test" "test" "more" "obvious" "word" "badworddd")) (text (string-join words " "))) - (letopt ((ispell-program-name fake-aspell-path)) + (letopt ((ispell-dictionary nil) + (ispell-program-name (ispell-tests--some-backend))) (ignore-errors (ispell-kill-ispell t t)) (with-temp-buffer - (insert - text) + (insert text) + ;; This is intentional. The incorrect word is not in the region, + ;; but `ispell-buffer' should move the point to the beginning + ;; of the buffer. (goto-char (length (nth 0 words))) (cl-labels ((checker () (user-error "expected error"))) @@ -1021,11 +1075,413 @@ This test gives it a word which does not exist." (progn (advice-add 'ispell-show-choices :override #'checker) - (should-error (ispell-region (point) (point-max))) + (should-error (ispell-buffer)) + (ispell-kill-ispell nil t) 'passed) (advice-remove 'ispell-show-choices #'checker))) )))) ) +(ert-deftest ispell/ispell-kill-ispell () + "Test that killing ispell works." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory) + (words '("tarampampamtararam" "test" "test" "more" "obvious" "word")) + (text (string-join words " "))) + (with-temp-buffer + (with-ispell-global-dictionary nil + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (insert text) + (ispell-init-process) + (should ispell-async-processp) + (should (eq (ispell-process-status) 'run)) + (ispell-kill-ispell nil t))) + 'passed + ))) + (message "lwf:debug2:ispell-program-name=%s:ispell-dictionary=%s" + ispell-program-name ispell-dictionary) + ) + +(ert-deftest ispell/ispell/buffer () + "`ispell' is just a wrapper around `ispell-region' +and `ispell-buffer', which is also a wrapper around +`ispell-buffer'. +This test might seem confusing, as it does not check +for the availability of the backend, but this does +not matter `ispell' function does not use the +backend." + (let ((transient-mark-mode t)) + (with-temp-buffer + (insert "hello world test test") + (goto-char 2) + (set-mark (point)) + (goto-char (point-max)) + (deactivate-mark) + (cl-labels ((checker-buffer () + t) + (checker-region (_a _b) + (user-error "test failed"))) + (unwind-protect + (progn + (advice-add 'ispell-buffer :override #'checker-buffer) + (advice-add 'ispell-region :override #'checker-region) + (ispell) + ) + (progn + (advice-remove 'ispell-buffer #'checker-buffer) + (advice-remove 'ispell-region #'checker-region)))) + )) + ) + +(ert-deftest ispell/ispell/region () + "`ispell' is just a wrapper around `ispell-region' +and `ispell-buffer', which is also a wrapper around +`ispell-buffer'." + (let ((transient-mark-mode t)) + (with-temp-buffer + (insert "hello world test test") + (goto-char 2) + (set-mark (point)) + (goto-char (point-max)) + (activate-mark) + (cl-labels ((checker-buffer () + (user-error "test failed")) + (checker-region (_a _b) + t)) + (unwind-protect + (progn + (advice-add 'ispell-buffer :override #'checker-buffer) + (advice-add 'ispell-region :override #'checker-region) + (ispell) + ) + (progn + (advice-remove 'ispell-buffer #'checker-buffer) + (advice-remove 'ispell-region #'checker-region)))) + )) + ) + +(ert-deftest ispell/ispell-change-dictionary () + "Simple test for changing a dictionary" + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (ispell-change-dictionary "english") + (should (equal ispell-local-dictionary "english")) + (ispell-change-dictionary "default") + (should (equal ispell-local-dictionary nil)) + (ispell-change-dictionary "english") + (should (equal ispell-local-dictionary "english")) + 'passed + )))) + ) + +(ert-deftest ispell/ispell-comments-and-strings/correct () + "Test that `ispell-comments-and-strings' does not err +on a correct buffer." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-dictionary nil) + (ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (ispell-kill-ispell t t) + (insert "#!/bin/bash\n" + "echo \"string to check\"\n" + "# commented line\n") + (sh-mode) + (ert-with-message-capture lres + (ispell-comments-and-strings) + (should (string-match "Spell-checking .* using .* with .* dictionary...done" lres)))) + 'passed + ))) + ) + +(ert-deftest ispell/ispell-comments-and-strings/incorrect () + "Test that `ispell-comments-and-strings' errs +on a correct buffer." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (insert "#!/bin/bash\n" + "echo \"string to check\"\n" + "# tarampampamtararam\n") + (sh-mode) + (ert-with-message-capture lres + (should-error (ispell-comments-and-strings))) + 'passed + )))) + ) + +(ert-deftest ispell/ispell-comment-or-string-at-point () + "Test that `ispell-comment-or-string-at-point' runs two tests. +One correct an one incorrect in the same buffer." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-dictionary nil) + (ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (insert "#!/bin/bash\n" + "echo \"string to check\"\n" + "# tarampampamtararam\n") + (sh-mode) + (goto-char 25) + (ert-with-message-capture lres + (ispell-comment-or-string-at-point) + (should (string-match "Spell-checking .* using .* with .* dictionary...done" lres))) + (goto-char 47) + (should-error (ispell-comment-or-string-at-point)) + 'passed)))) + ) + +(ert-deftest ispell/ispell-pdict-save () + "Simple `ispell-pdict-save' test." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (insert "test") + (ispell-kill-ispell t t) + (ispell-pdict-save t t) + 'passed)))) + ) + +(ert-deftest ispell/ispell-pdict-save/force () + "Simple `ispell-pdict-save' test." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (insert "testttttt") + (goto-char 1) + (ispell-kill-ispell t t) + (ispell-pdict-save t t) + 'passed)))) + ) + +(ert-deftest ispell/ispell-pdict-save/modified () + "Simple `ispell-pdict-save' test." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend-available-p))) + (with-temp-buffer + (insert "testttttt") + (goto-char 1) + (ispell-kill-ispell t t) + (cl-labels ((checker (s) + (should (equal s "#\n")))) + (unwind-protect (progn + (advice-add 'ispell-send-string :override + #'checker) + (let ((ispell-pdict-modified-p t)) + (ispell-pdict-save t nil))) + (advice-remove 'ispell-send-string #'checker)))) + 'passed))) + ) + +(ert-deftest ispell/ispell-pdict-save/unmodified () + "Simple `ispell-pdict-save' test." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (insert "testttttt") + (goto-char 1) + (ispell-kill-ispell t t) + (cl-labels ((checker (_s) + (user-error "test failed"))) + (unwind-protect (progn + (advice-add 'ispell-send-string :override + #'checker) + (let ((ispell-pdict-modified-p nil)) + (ispell-pdict-save t nil))) + (advice-remove 'ispell-send-string #'checker)))) + 'passed))) + ) + +(ert-deftest ispell/ispell-lookup-words/simple () + "Test if `ispell-lookup-words' is runnable." + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory) + (tempfile (make-temp-file "emacs-ispell.el-test" nil nil "waveguides"))) + (letopt ((ispell-complete-word-dict tempfile)) + (with-temp-buffer + (insert "waveguid") + (unwind-protect + (progn + (should (equal + (ispell-lookup-words "waveguid") + '("waveguides"))) + (should (equal + (ispell-lookup-words "sdfsdfasdfsadfasdfasdf") + nil))) + (delete-file tempfile))) + 'passed))) + ) + +(ert-deftest ispell/ispell-complete-word/ispell-completion-at-point () + "Test if `ispell-complete-word' and `ispell-completion-at-point' +are runnable." + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory) + (tempfile (make-temp-file "emacs-ispell.el-test" nil nil "waveguides"))) + (ignore-errors (ispell-kill-ispell t t)) + (with-ispell-global-dictionary nil + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-complete-word-dict tempfile)) + (with-temp-buffer + (insert "waveguid") + (cl-labels ((my-ispell-command-loop (_p _n _w _s _e) + (car (nth 2 (ispell-completion-at-point))))) + (unwind-protect + (progn + (advice-add 'ispell-command-loop :override + #'my-ispell-command-loop) + (should (equal (car (nth 2 (ispell-completion-at-point))) + "waveguides")) + (ispell-complete-word) + (should (equal "waveguides" (buffer-string)))) + (progn + (delete-file tempfile) + (advice-remove + 'ispell-command-loop + #'my-ispell-command-loop))))) + 'passed)))) + ) + +(ert-deftest ispell/ispell-complete-word-interior-frag/simple () + "Test if `ispell-complete-word-interior-frag' is runnable." + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory) + (tempfile (make-temp-file "emacs-ispell.el-test" nil nil "waveguides"))) + (with-ispell-global-dictionary nil + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-complete-word-dict tempfile)) + (with-temp-buffer + (insert "waveguid") + (cl-labels ((my-ispell-command-loop (_p _n _w _s _e) + (car (nth 2 (ispell-completion-at-point))))) + (unwind-protect + (progn + (advice-add 'ispell-command-loop :override + #'my-ispell-command-loop) + (goto-char 4) + (ispell-complete-word-interior-frag) + (should (equal "waveguides" (buffer-string)))) + (progn + (delete-file tempfile) + (advice-remove + 'ispell-command-loop + #'my-ispell-command-loop))))) + 'passed)))) + ) + +(ert-deftest ispell/ispell-minor-mode/simple () + "Try enabling `ispell-minor-mode' and test +one test file." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil)) + (with-temp-buffer + (text-mode) + (ispell-minor-mode) + (insert "tarampampamtararam") + (set--this-command-keys " ") + (ert-with-message-capture lres + (ispell-minor-check) + (should (string-match "TARAMPAMPAMTARARAM is incorrect" lres))) + ) + 'passed))) + ) + +(ert-deftest ispell/ispell-message/correct () + "Test that `ispell-message' works. +`ispell-message' is intended to be run before +a message is sent in `message-mode' or `mml-mode'." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend)) + (ispell-dictionary nil)) + (with-temp-buffer + (insert + "To: +Subject: +From: Anon +Fcc: /tmp/234234.cb022f1a625b65b2.mainframe:2,S +User-Agent: mu4e 1.12.9; emacs 31.0.50 +Date: Tue, 09 Sep 2025 07:43:58 +0800 +Message-ID: <878qiov7b5.fsf@mainframe> +--text follows this line-- +Hello World +-- +signature +") + (message-mode) + (ert-with-message-capture lres + (ispell-message) + (should (not (string-match "is incorrect" lres))) + ) + (set-buffer-modified-p nil) + ) + 'passed))) + ) +(ert-deftest ispell/ispell-message/incorrect () + "Test that `ispell-message' works. +`ispell-message' is intended to be run before +a message is sent in `message-mode' or `mml-mode'." + (skip-unless (ispell-tests--some-backend-available-p)) + (with-environment-variables (("HOME" temporary-file-directory)) + (let* ((default-directory temporary-file-directory)) + (letopt ((ispell-program-name (ispell-tests--some-backend))) + (with-temp-buffer + (insert + "To: +Subject: +From: Anon +Fcc: /tmp/234234.cb022f1a625b65b2.mainframe:2,S +User-Agent: mu4e 1.12.9; emacs 31.0.50 +Date: Tue, 09 Sep 2025 07:43:58 +0800 +Message-ID: <878qiov7b5.fsf@mainframe> +--text follows this line-- +<#part sign=pgpmime> +tarampampamtararam +-- +signature +") + (message-mode) + (cl-labels ((checker () + (user-error "expected error"))) + (unwind-protect + (progn + (advice-add 'ispell-show-choices :override #'checker) + (should-error (ispell-message))) + (progn + (advice-remove 'ispell-show-choices #'checker) + (set-buffer-modified-p nil)))) + + ) + 'passed))) + ) + + + +;;====================================================================== +;; On this "emacs page" I want to test that customise variables change +;; function behavior in the way are intended to do. + + + (provide 'tests-ispell) ;;; tests-ispell.el ends here commit 307405a72c43da3abd2d56ad958ff6021fee15d0 Author: Eli Zaretskii Date: Fri Sep 12 16:08:40 2025 +0300 Add new scripts to the default fontset * lisp/international/fontset.el (setup-default-fontset): Add 4 scripts new in Unicode 17.0. diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index 03b92b6b34c..67599daeb1a 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el @@ -920,7 +920,11 @@ emoji chess-symbol garay - sunuwar)) + sunuwar + sidetic + tolong-siki + beria-erfe + tai-yo)) (set-fontset-font "fontset-default" script (font-spec :registry "iso10646-1" :script script) nil 'append)) commit c90536efe8f912f3b69b764f7d3e75e55aa87f33 Merge: e41eae39ad6 4c27866df9d Author: Michael Albinus Date: Fri Sep 12 12:44:34 2025 +0200 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit e41eae39ad6accdd1b02dedcb36e48c2b463d0b8 Author: Liu Hui Date: Fri Sep 12 12:43:54 2025 +0200 Tramp: Refactor environment variable filtering to a separate function * lisp/net/tramp.el (tramp-local-environment-variable-p): New function. (Bug#79413) (tramp-handle-make-process): * lisp/net/tramp-sh.el (tramp-sh-handle-make-process) (tramp-sh-handle-process-file): * lisp/net/tramp-androidsu.el (tramp-androidsu-handle-make-process): Use `tramp-local-environment-variable-p'. diff --git a/lisp/net/tramp-androidsu.el b/lisp/net/tramp-androidsu.el index a593833a836..6cc3f14381d 100644 --- a/lisp/net/tramp-androidsu.el +++ b/lisp/net/tramp-androidsu.el @@ -311,9 +311,7 @@ FUNCTION." (when (and (string-search "=" elt) - (not - (member - elt (default-toplevel-value 'process-environment)))) + (not (tramp-local-environment-variable-p elt))) (setq env (cons elt env))))) ;; Add remote path if exists. (env (let ((remote-path (string-join (tramp-get-remote-path v) ":"))) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 9d13cdc3a2d..0a454fed69b 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -3052,8 +3052,7 @@ will be used." ;; `process-environment'. env uenv (env (dolist (elt (cons prompt process-environment) env) - (or (member - elt (default-toplevel-value 'process-environment)) + (or (tramp-local-environment-variable-p elt) (if (string-search "=" elt) (setq env (append env `(,elt))) (setq uenv (cons elt uenv)))))) @@ -3288,7 +3287,7 @@ will be used." (cons program args) " ")) ;; We use as environment the difference to toplevel `process-environment'. (dolist (elt process-environment) - (or (member elt (default-toplevel-value 'process-environment)) + (or (tramp-local-environment-variable-p elt) (if (string-search "=" elt) (setq env (append env `(,elt))) (setq uenv (cons elt uenv))))) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index ad768f9e038..a27e8b8fbe8 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5347,6 +5347,18 @@ should be set connection-local.") (or (not (stringp buffer)) (not (tramp-tramp-file-p buffer))) (or (not (stringp stderr)) (not (tramp-tramp-file-p stderr)))))) +;; This function is used by tramp-*-handle-make-process and +;; tramp-sh-handle-process-file to filter local environment variables +;; that should not be propagated remotely. Users can override this +;; function if necessary, for example, to ensure that a specific +;; environment variable is applied to remote processes, whether it +;; exists locally or not. +(defun tramp-local-environment-variable-p (arg) + "Return non-nil if ARG exists in default `process-environment'. +Tramp does not propagate local environment variables in remote +processes." + (member arg (default-toplevel-value 'process-environment))) + (defun tramp-handle-make-process (&rest args) "An alternative `make-process' implementation for Tramp files." (tramp-skeleton-make-process args nil nil @@ -5365,9 +5377,7 @@ should be set connection-local.") (env (dolist (elt process-environment env) (when (and (string-search "=" elt) - (not - (member - elt (default-toplevel-value 'process-environment)))) + (not (tramp-local-environment-variable-p elt))) (setq env (cons elt env))))) ;; Add remote path if exists. (env (if-let* ((sh-file-name-handler-p) commit 4c27866df9dc8fbb0369f17351f5531e21a450d2 Author: Philip Kaludercic Date: Fri Sep 12 12:20:30 2025 +0200 ; * lisp/emacs-lisp/timeout.el: Bump version header to 2.1 This is done to reflect the same version as in the upstream repository, thus avoiding accidental upgrades: https://github.com/karthink/timeout/commit/6d31046c5b1817271a52ab810e5bc635fe7ab3b4 diff --git a/lisp/emacs-lisp/timeout.el b/lisp/emacs-lisp/timeout.el index 2f5a40a9421..2b90650f02a 100644 --- a/lisp/emacs-lisp/timeout.el +++ b/lisp/emacs-lisp/timeout.el @@ -4,7 +4,7 @@ ;; Author: Karthik Chikmagalur ;; Keywords: convenience, extensions -;; Version: 2.0 +;; Version: 2.1 ;; Package-Requires: ((emacs "24.4")) ;; URL: https://github.com/karthink/timeout commit 26ad23addbf79862f310136d2f0d95568fef3a04 Author: Michael Albinus Date: Fri Sep 12 12:29:30 2025 +0200 Introduc auth-source-ignore-non-existing-file * lisp/auth-source.el (auth-source-ignore-non-existing-file): Rename it from `auth-source-ignore-empty-file'. (auth-source-backends-parser-file): Use it. * doc/misc/auth.texi (Help for users): * etc/NEWS: * test/lisp/auth-source-tests.el (auth-source-validate-backend) (auth-source-test-netrc-create-secret): Use `auth-source-ignore-non-existing-file'. diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index 1307dcb5080..cc6fc0c3396 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -287,13 +287,13 @@ with name extension @file{.plist}. Its format is described in the :user "testuser" :password "testpass")) @end example -@vindex auth-source-ignore-empty-file +@vindex auth-source-ignore-non-existing-file File-based data stores are ignored in @code{auth-sources}, if the -underlying data file does not exist, or is empty. This is relevant, if -a new secret is stored in such a file; the first usable entry of -@code{auth-sources} is selected as target. If you want also empty or -not existing files to be selected, set the user option -@code{auth-source-ignore-empty-file} to @code{nil}. +underlying data file does not exist. This is relevant, if a new secret +is stored in such a file; the first usable entry of @code{auth-sources} +is selected as target. If you want also not existing files to be +selected, set the user option +@code{auth-source-ignore-non-existing-file} to @code{nil}. @node Multiple GMail accounts with Gnus @chapter Multiple GMail accounts with Gnus diff --git a/etc/NEWS b/etc/NEWS index a69029c1b38..27e3f1e4ce0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -767,12 +767,11 @@ you could already use 'C-u C-x C-n' to clear the goal column. +++ *** Non-existing or empty files are ignored in 'auth-sources'. -File-based data stores are ignored in ‘auth-sources’, if the -underlying data file does not exist, or is empty. This is relevant, if -a new secret is stored in such a file; the first usable entry of -‘auth-sources’ is selected as target. If you want also empty or not -existing files to be selected, set the user option -‘auth-source-ignore-empty-file’ to nil. +File-based data stores are ignored in ‘auth-sources’, if the underlying +data file does not exist. This is relevant, if a new secret is stored +in such a file; the first usable entry of ‘auth-sources’ is selected as +target. If you want also not existing files to be selected, set the +user option ‘auth-source-ignore-non-existing-file’ to nil. ** Autoinsert diff --git a/lisp/auth-source.el b/lisp/auth-source.el index f3506df7741..442fe2fc1e3 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -370,11 +370,10 @@ soon as a function returns non-nil.") :type 'ignore))) (auth-source-backend-parse-parameters entry backend))) -(defcustom auth-source-ignore-empty-file t - "If set non-nil, file-based backends with no data are ignored. -A backend is ignored, when the underlying file does not exist, or it is -empty. Consequently, no newly created entry is saved in an empty -backend when this user option is non-nil. +(defcustom auth-source-ignore-non-existing-file t + "If set non-nil, file-based backends are ignored if the file does not exist. +Consequently, no newly created entry is saved in such a backend when +this user option is non-nil. Supported backend types are `netrc', `plstore' and `json'." :version "31.1" @@ -394,41 +393,35 @@ Supported backend types are `netrc', `plstore' and `json'." (extension (or (and (stringp source-without-gpg) (file-name-extension source-without-gpg)) ""))) - (if (and (stringp source) - (or (not auth-source-ignore-empty-file) - (and-let* - (;; File exists. - (attr (file-attributes source)) - ;; File isn't empty. - ((not (zerop (file-attribute-size attr)))))))) - (cond - ((equal extension "plist") - (auth-source-backend - :source source - :type 'plstore - :search-function #'auth-source-plstore-search - :create-function #'auth-source-plstore-create - :data (plstore-open source))) - ((member-ignore-case extension '("json")) - (auth-source-backend - :source source - :type 'json - :search-function #'auth-source-json-search)) - (t - (auth-source-backend - :source source - :type 'netrc - :search-function #'auth-source-netrc-search - :create-function #'auth-source-netrc-create))) - + (cond + ((or (not (stringp source)) + (and auth-source-ignore-non-existing-file + (not (file-exists-p source)))) (when auth-source-debug (auth-source-do-warn - (concat "auth-source-backend-parse: " - "not existing or empty file, ignoring spec: %S") + "auth-source-backend-parse: not existing file, ignoring spec: %S" entry)) (auth-source-backend :source "" - :type 'ignore)))) + :type 'ignore)) + ((equal extension "plist") + (auth-source-backend + :source source + :type 'plstore + :search-function #'auth-source-plstore-search + :create-function #'auth-source-plstore-create + :data (plstore-open source))) + ((member-ignore-case extension '("json")) + (auth-source-backend + :source source + :type 'json + :search-function #'auth-source-json-search)) + (t + (auth-source-backend + :source source + :type 'netrc + :search-function #'auth-source-netrc-search + :create-function #'auth-source-netrc-create))))) ;; Note this function should be last in the parser functions, so we add it first (add-hook 'auth-source-backend-parser-functions #'auth-source-backends-parser-file) diff --git a/test/lisp/auth-source-tests.el b/test/lisp/auth-source-tests.el index 7ae337650f9..b4bc0f5a7f6 100644 --- a/test/lisp/auth-source-tests.el +++ b/test/lisp/auth-source-tests.el @@ -37,7 +37,7 @@ (type . ignore)))) (defun auth-source-validate-backend (source validation-alist) - (let* (auth-source-ignore-empty-file + (let* (auth-source-ignore-non-existing-file (backend (auth-source-backend-parse source))) (should (auth-source-backend-p backend)) (dolist (pair validation-alist) @@ -375,13 +375,13 @@ "%s@%s" (plist-get auth-info :user) (plist-get auth-info :host))))))) (ert-deftest auth-source-test-netrc-create-secret () - (ert-with-temp-file empty-file :suffix "auth-source-test" (ert-with-temp-file netrc-file :suffix "auth-source-test" :text "machine a1 port a2 user a3 password a4" - (let* ((auth-sources (list empty-file netrc-file)) + (let* ((non-existing-file (make-temp-name temporary-file-directory)) + (auth-sources (list non-existing-file netrc-file)) (auth-source-save-behavior t) - (auth-source-ignore-empty-file t) + (auth-source-ignore-non-existing-file t) host auth-info auth-passwd) (dolist (passwd '("foo" "" nil)) ;; Redefine `read-*' in order to avoid interactive input. @@ -419,7 +419,7 @@ (string-equal (plist-get auth-info :user) (user-login-name))) (should (string-equal (plist-get auth-info :host) host)) (should (string-equal auth-passwd passwd)) - (should (search-forward host nil 'noerror)))))))))) + (should (search-forward host nil 'noerror))))))))) (ert-deftest auth-source-delete () (ert-with-temp-file netrc-file commit 43f507f4308a9c4b3bdcb1ef7614e29914c76561 Author: Michael Albinus Date: Fri Sep 12 12:21:48 2025 +0200 Minor edits in tramp-tests.el * test/lisp/net/tramp-tests.el (tramp-test16-file-expand-wildcards) (tramp-test26-interactive-file-name-completion): Prefer #'string-lessp over 'string<. (tramp--test-ange-ftp-p, tramp-test47-read-password) (tramp-test47-read-otp-password): Use function read syntax. diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 8c230f43cf3..7f8b71180d2 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -3460,41 +3460,43 @@ This tests also `file-directory-p' and `file-accessible-directory-p'." ;; `sort' works destructive. (should (equal (file-expand-wildcards "*") - (sort (copy-sequence '("foo" "bar" "baz")) 'string<))) + (sort (copy-sequence '("foo" "bar" "baz")) #'string-lessp))) (should (equal (file-expand-wildcards "ba?") - (sort (copy-sequence '("bar" "baz")) 'string<))) + (sort (copy-sequence '("bar" "baz")) #'string-lessp))) (should (equal (file-expand-wildcards "ba[rz]") - (sort (copy-sequence '("bar" "baz")) 'string<))) + (sort (copy-sequence '("bar" "baz")) #'string-lessp))) (should (equal (file-expand-wildcards "*" 'full) (sort - (copy-sequence `(,tmp-name2 ,tmp-name3 ,tmp-name4)) 'string<))) + (copy-sequence `(,tmp-name2 ,tmp-name3 ,tmp-name4)) + #'string-lessp))) (should (equal (file-expand-wildcards "ba?" 'full) - (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<))) + (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) #'string-lessp))) (should (equal (file-expand-wildcards "ba[rz]" 'full) - (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<))) + (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) #'string-lessp))) (should (equal (file-expand-wildcards (concat tmp-name1 "/" "*")) (sort - (copy-sequence `(,tmp-name2 ,tmp-name3 ,tmp-name4)) 'string<))) + (copy-sequence `(,tmp-name2 ,tmp-name3 ,tmp-name4)) + #'string-lessp))) (should (equal (file-expand-wildcards (concat tmp-name1 "/" "ba?")) - (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<))) + (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) #'string-lessp))) (should (equal (file-expand-wildcards (concat tmp-name1 "/" "ba[rz]")) - (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) 'string<)))) + (sort (copy-sequence `(,tmp-name3 ,tmp-name4)) #'string-lessp)))) ;; Cleanup. (ignore-errors (delete-directory tmp-name1 'recursive)))))) @@ -5252,7 +5254,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (member (caddr test-and-result) completions)) (should (equal - (caddr test-and-result) (sort completions))))))))))) + (caddr test-and-result) + (sort completions #'string-lessp))))))))))) ;; Cleanup. (when tramp-trace @@ -7340,7 +7343,7 @@ This requires restrictions of file name syntax." "Check, whether Ange-FTP is used." (eq (tramp-find-foreign-file-name-handler tramp-test-vec) - 'tramp-ftp-file-name-handler)) + #'tramp-ftp-file-name-handler)) (defun tramp--test-asynchronous-processes-p () "Whether asynchronous processes tests are run. @@ -8306,7 +8309,7 @@ process sentinels. They shall not disturb each other." ;; Reading password from auth-source works. We use the netrc ;; backend; the other backends shall behave similar. ;; Macro `ert-with-temp-file' was introduced in Emacs 29.1. - (with-no-warnings (when (symbol-plist 'ert-with-temp-file) + (with-no-warnings (when (symbol-plist #'ert-with-temp-file) (tramp-cleanup-connection tramp-test-vec 'keep-debug) (setq mocked-input nil) (auth-source-forget-all-cached) @@ -8319,7 +8322,7 @@ process sentinels. They shall not disturb each other." (should (file-exists-p ert-remote-temporary-file-directory)))))) ;; Checking session-timeout. - (with-no-warnings (when (symbol-plist 'ert-with-temp-file) + (with-no-warnings (when (symbol-plist #'ert-with-temp-file) (tramp-cleanup-connection tramp-test-vec 'keep-debug) (let ((tramp-connection-properties (cons '(nil "session-timeout" 1) @@ -8395,7 +8398,7 @@ process sentinels. They shall not disturb each other." ;; The password shouldn't be read from auth-source. ;; Macro `ert-with-temp-file' was introduced in Emacs 29.1. - (with-no-warnings (when (symbol-plist 'ert-with-temp-file) + (with-no-warnings (when (symbol-plist #'ert-with-temp-file) (tramp-cleanup-connection tramp-test-vec 'keep-debug) (setq mocked-input nil) (auth-source-forget-all-cached) @@ -8848,7 +8851,7 @@ Since it unloads Tramp, it shall be the last test to run." (string-match-p (rx bol "with" (| "tramp" "parsed")) (symbol-name x)) ;; `tramp-register-archive-file-name-handler' is autoloaded ;; in Emacs < 29.1. - (not (eq 'tramp-register-archive-file-name-handler x)) + (not (eq #'tramp-register-archive-file-name-handler x)) ;; `tramp-compat-rx' is autoloaded in Emacs 29.1. (not (eq 'tramp-compat-rx x)) (not (string-match-p commit 464216ca737a3b98175b02244251878508e1ca15 Author: Mattias Engdegård Date: Thu Sep 11 22:21:57 2025 +0200 ; even less test log spam from load diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index 7cbfd97d653..0245ad3c977 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -885,8 +885,9 @@ byte-compiled. Run with dynamic binding." (s-comp (byte-compile s-int)) (v-int (lambda (x) (1+ x))) (v-comp (byte-compile v-int)) - (bc (lambda (f) (bytecomp-tests--with-warnings (byte-compile f)))) - (comp (lambda (f) (funcall (funcall bc `(lambda () (,f 3))))))) + (comp (lambda (f) + (funcall (bytecomp-tests--with-warnings + (byte-compile `(lambda () (,f 3)))))))) (should (equal (funcall comp s-int) 4)) (should (equal (funcall comp s-comp) 4)) (should (equal (funcall comp v-int) 4)) @@ -1466,7 +1467,7 @@ literals (Bug#20852)." (print form (current-buffer))) (write-region (point-min) (point-max) source nil 'silent) (byte-compile-file source) - (load source) + (load source nil t) (should (equal bytecomp-tests--foobar (cons 1 2))))) (ert-deftest bytecomp-tests--test-no-warnings-with-advice () @@ -1988,7 +1989,7 @@ compiled correctly." (let ((file (ert-resource-file "bc-test-alpha.el")) (load-path (cons (ert-resource-directory) load-path))) (byte-compile-file file) - (load-file (concat file "c")) + (load (concat file "c") nil t t) (should (equal (bc-test-alpha-f 'a) '(nil a))))) (ert-deftest bytecomp-tests-byte-compile--wide-docstring-p/func-arg-list () diff --git a/test/lisp/emacs-lisp/macroexp-tests.el b/test/lisp/emacs-lisp/macroexp-tests.el index 9b6aca6dce0..817c5d7be49 100644 --- a/test/lisp/emacs-lisp/macroexp-tests.el +++ b/test/lisp/emacs-lisp/macroexp-tests.el @@ -66,7 +66,7 @@ ;; Test the case where we load a file which byte-compiles another. (defvar macroexp--m1-tests-comp-filename) (makunbound 'macroexp--m1-tests-comp-filename) - (load (expand-file-name "m2.el" rsrc-dir)) + (load (expand-file-name "m2.el" rsrc-dir) nil t) (should (equal "m1.el" (file-name-nondirectory macroexp--m1-tests-comp-filename))))) diff --git a/test/lisp/progmodes/elisp-mode-tests.el b/test/lisp/progmodes/elisp-mode-tests.el index 7f635b8e88b..6b0535dafca 100644 --- a/test/lisp/progmodes/elisp-mode-tests.el +++ b/test/lisp/progmodes/elisp-mode-tests.el @@ -1079,7 +1079,7 @@ evaluation of BODY." (mapatoms (lambda (s) (when (string-match "^elisp--foo-" (symbol-name s)) (unintern s obarray)))) - (load test-file) + (load test-file nil t) (should (intern-soft "elisp--foo-test")) (should-not (intern-soft "f-test")))) @@ -1094,13 +1094,13 @@ evaluation of BODY." (should-not (intern-soft "f-test")) (should (intern-soft "elisp--foo-test")) (should-not (fboundp (intern-soft "elisp--foo-test"))) - (load byte-compiled) + (load byte-compiled nil t) (should (intern-soft "elisp--foo-test")) (should-not (intern-soft "f-test")))) (ert-deftest elisp-shorthand-completion-at-point () (let ((test-file (ert-resource-file "simple-shorthand-test.el"))) - (load test-file) + (load test-file nil t) (with-current-buffer (find-file-noselect test-file) (revert-buffer t t) (goto-char (point-min)) @@ -1115,7 +1115,7 @@ evaluation of BODY." (ert-deftest elisp-shorthand-escape () (let ((test-file (ert-resource-file "simple-shorthand-test.el"))) - (load test-file) + (load test-file nil t) (should (intern-soft "f-test4---")) (should-not (intern-soft "elisp--foo-test4---")) (should (= 84 (funcall (intern-soft "f-test4---")))) diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el index 4dc8938b973..d1320a665a5 100644 --- a/test/src/lread-tests.el +++ b/test/src/lread-tests.el @@ -388,14 +388,14 @@ literals (Bug#20852)." ;; but eagerly with `force-load-doc-strings' set. (let ((file (expand-file-name "lazydoc.el" (ert-resource-directory)))) (fmakunbound 'lazydoc-fun) - (load file) + (load file nil t) (let ((f (symbol-function 'lazydoc-fun))) (should (byte-code-function-p f)) (should (equal (aref f 4) (cons file 87)))) (fmakunbound 'lazydoc-fun) (let ((load-force-doc-strings t)) - (load file) + (load file nil t) (let ((f (symbol-function 'lazydoc-fun))) (should (byte-code-function-p f)) (should (equal (aref f 4) "My little\ndoc string\nhere")))))) commit 0bf5898f20571897dc540d10cdc6f4c3a517a82c Author: Philip Kaludercic Date: Thu Sep 11 23:25:37 2025 +0200 Update timeout to 2f3ebb53 See https://github.com/karthink/timeout/commit/f3ebb5. diff --git a/lisp/emacs-lisp/timeout.el b/lisp/emacs-lisp/timeout.el index c949e7a912e..2f5a40a9421 100644 --- a/lisp/emacs-lisp/timeout.el +++ b/lisp/emacs-lisp/timeout.el @@ -3,7 +3,6 @@ ;; Copyright (C) 2023-2025 Free Software Foundation, Inc. ;; Author: Karthik Chikmagalur -;; Maintainer: Karthik Chikmagalur ;; Keywords: convenience, extensions ;; Version: 2.0 ;; Package-Requires: ((emacs "24.4")) @@ -41,28 +40,45 @@ ;; (timeout-throttled-func 'func 2.0) ;; (timeout-debounced-func 'func 0.3) ;; -;; You can bind this via `defalias': +;; You can bind this via fset or defalias: ;; ;; (defalias 'throttled-func (timeout-throttled-func 'func 2.0)) +;; (fset 'throttled-func (timeout-throttled-func 'func 2.0)) +;; +;; Dynamic duration is supported by passing a symbol or function instead of +;; a number: +;; +;; (defvar my-timeout 1.5) +;; (timeout-throttle 'func 'my-timeout) ; uses value of my-timeout +;; (timeout-throttle 'func (lambda () (if busy-p 0.1 2.0))) ; conditional ;; ;; The interactive spec and documentation of FUNC is carried over to the new ;; function. ;;; Code: - (require 'nadvice) +(defsubst timeout--eval-value (value) + "Eval a VALUE. +If value is a function (either lambda or a callable symbol), eval the +function (with no argument) and return the result. Else if value is a +symbol, return its value. Else return itself." + (cond ((numberp value) value) + ((functionp value) (funcall value)) + ((and (symbolp value) (boundp value)) (symbol-value value)) + (t (error "Invalid value %s" value)))) + (defun timeout--throttle-advice (&optional timeout) "Return a function that throttles its argument function. -TIMEOUT defaults to 1 second. +For the meaning of TIMEOUT see `timeout-throttle'. When FUNC does not run because of the throttle, the result from the previous successful call is returned. This is intended for use as function advice." (let ((throttle-timer) - (timeout (or timeout 1.0)) + (timeout-value (or timeout 1.0)) (result)) (lambda (orig-fn &rest args) "Throttle calls to this function." @@ -71,7 +87,7 @@ This is intended for use as function advice." (setq result (apply orig-fn args)) (setq throttle-timer (run-with-timer - timeout nil + (timeout--eval-value timeout-value) nil (lambda () (cancel-timer throttle-timer) (setq throttle-timer nil))))))))) @@ -79,21 +95,23 @@ This is intended for use as function advice." (defun timeout--debounce-advice (&optional delay default) "Return a function that debounces its argument function. -DELAY defaults to 0.50 seconds. The function returns immediately with -value DEFAULT when called the first time. On future invocations, the -result from the previous call is returned. +For the meaning of DELAY see `timeout-debounce'. + +The function returns immediately with value DEFAULT when called the +first time. On future invocations, the result from the previous call is +returned. This is intended for use as function advice." (let ((debounce-timer nil) - (delay (or delay 0.50))) + (delay-value (or delay 0.50))) (lambda (orig-fn &rest args) "Debounce calls to this function." (prog1 default (if (timerp debounce-timer) - (timer-set-idle-time debounce-timer delay) + (timer-set-idle-time debounce-timer (timeout--eval-value delay-value)) (setq debounce-timer (run-with-idle-timer - delay nil + (timeout--eval-value delay-value) nil (lambda (buf) (cancel-timer debounce-timer) (setq debounce-timer nil) @@ -111,13 +129,15 @@ This advises FUNC, when called (interactively or from code), to run after DELAY seconds. If FUNC is called again within this time, the timer is reset. -DELAY defaults to 0.5 seconds. Using a delay of 0 removes any -debounce advice. +DELAY defaults to 0.5 seconds. DELAY can be a number, a symbol (whose +value is a number), or a function (that evaluates to a number). When +passed a symbol or function, it is evaluated at runtime for dynamic +duration. Using a delay of 0 removes any debounce advice. The function returns immediately with value DEFAULT when called the first time. On future invocations, the result from the previous call is returned." - (if (and delay (= delay 0)) + (if (and delay (eq delay 0)) (advice-remove func 'debounce) (advice-add func :around (timeout--debounce-advice delay default) '((name . debounce) @@ -126,12 +146,14 @@ returned." (defun timeout-throttle (func &optional throttle) "Make FUNC run no more frequently than once every THROTTLE seconds. -THROTTLE defaults to 1 second. Using a throttle of 0 removes any -throttle advice. +THROTTLE defaults to 1 second. THROTTLE can be a number, a symbol (whose +value is a number), or a function (that evaluates to a number). When +passed a symbol or function, it is evaluated at runtime for dynamic +duration. Using a throttle of 0 removes any throttle advice. When FUNC does not run because of the throttle, the result from the previous successful call is returned." - (if (and throttle (= throttle 0)) + (if (and throttle (eq throttle 0)) (advice-remove func 'throttle) (advice-add func :around (timeout--throttle-advice throttle) '((name . throttle) @@ -141,12 +163,15 @@ previous successful call is returned." "Return a throttled version of function FUNC. The throttled function runs no more frequently than once every THROTTLE -seconds. THROTTLE defaults to 1 second. +seconds. THROTTLE defaults to 1 second. THROTTLE can be a number, a +symbol (whose value is a number), or a function (that evaluates to a +number). When passed a symbol or function, it is evaluated at runtime +for dynamic duration. When FUNC does not run because of the throttle, the result from the previous successful call is returned." (let ((throttle-timer nil) - (throttle (or throttle 1)) + (throttle-value (or throttle 1)) (result)) (if (commandp func) ;; INTERACTIVE version @@ -154,7 +179,7 @@ previous successful call is returned." (:documentation (concat (documentation func) - (format "\n\nThrottle calls to this function by %f seconds" throttle))) + "\n\nThrottle calls to this function")) (interactive (advice-eval-interactive-spec (cadr (interactive-form func)))) (prog1 result @@ -162,7 +187,7 @@ previous successful call is returned." (setq result (apply func args)) (setq throttle-timer (run-with-timer - throttle nil + (timeout--eval-value throttle-value) nil (lambda () (cancel-timer throttle-timer) (setq throttle-timer nil))))))) @@ -171,13 +196,13 @@ previous successful call is returned." (:documentation (concat (documentation func) - (format "\n\nThrottle calls to this function by %f seconds" throttle))) + "\n\nThrottle calls to this function")) (prog1 result (unless (and throttle-timer (timerp throttle-timer)) (setq result (apply func args)) (setq throttle-timer - (run-with-timer - throttle nil + (run-with-timer + (timeout--eval-value throttle-value) nil (lambda () (cancel-timer throttle-timer) (setq throttle-timer nil)))))))))) @@ -186,28 +211,30 @@ previous successful call is returned." "Return a debounced version of function FUNC. The debounced function runs DELAY seconds after it is called. DELAY -defaults to 0.5 seconds. +defaults to 0.5 seconds. DELAY can be a number, a symbol (whose value +is a number), or a function (that evaluates to a number). When passed +a symbol or function, it is evaluated at runtime for dynamic duration. The function returns immediately with value DEFAULT when called the first time. On future invocations, the result from the previous call is returned." (let ((debounce-timer nil) - (delay (or delay 0.50))) + (delay-value (or delay 0.50))) (if (commandp func) ;; INTERACTIVE version (lambda (&rest args) (:documentation (concat (documentation func) - (format "\n\nDebounce calls to this function by %f seconds" delay))) + "\n\nDebounce calls to this function")) (interactive (advice-eval-interactive-spec (cadr (interactive-form func)))) (prog1 default (if (timerp debounce-timer) - (timer-set-idle-time debounce-timer delay) + (timer-set-idle-time debounce-timer (timeout--eval-value delay-value)) (setq debounce-timer (run-with-idle-timer - delay nil + (timeout--eval-value delay-value) nil (lambda (buf) (cancel-timer debounce-timer) (setq debounce-timer nil) @@ -222,13 +249,13 @@ returned." (:documentation (concat (documentation func) - (format "\n\nDebounce calls to this function by %f seconds" delay))) + "\n\nDebounce calls to this function")) (prog1 default (if (timerp debounce-timer) - (timer-set-idle-time debounce-timer delay) + (timer-set-idle-time debounce-timer (timeout--eval-value delay-value)) (setq debounce-timer (run-with-idle-timer - delay nil + (timeout--eval-value delay-value) nil (lambda (buf) (cancel-timer debounce-timer) (setq debounce-timer nil) commit 1d6ec2a0406c8a53fcf793b05453dbcc7e809d76 Author: Eli Zaretskii Date: Thu Sep 11 19:30:19 2025 +0300 ; * etc/NEWS: Fix last change. diff --git a/etc/NEWS b/etc/NEWS index c410843f8f0..a69029c1b38 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -71,8 +71,6 @@ done from early-init.el, such as adding to 'package-directory-list'. * Changes in Emacs 31.1 -** Emacs now supports Unicode Standard version 17.0. - ** 'prettify-symbols-mode' attempts to ignore undisplayable characters. Previously, such characters would be rendered as, e.g., white boxes. @@ -647,7 +645,7 @@ pair with 'completing-read', and removes it from the translation table. ** Internationalization --- -*** Emacs now supports Unicode version 16.0. +*** Emacs now supports Unicode Standard version 17.0. --- *** New input method 'greek-polytonic'. commit 5579d32a41cae8c525021739e83f84abc3ab4746 Author: Eli Zaretskii Date: Thu Sep 11 18:00:42 2025 +0300 Update to Unicode 17.0 * test/manual/BidiCharacterTest.txt: * admin/unidata/BidiBrackets.txt: * admin/unidata/BidiMirroring.txt: * admin/unidata/Blocks.txt: * admin/unidata/IVD_Sequences.txt: * admin/unidata/IdnaMappingTable.txt: * admin/unidata/NormalizationTest.txt: * admin/unidata/PropertyValueAliases.txt: * admin/unidata/ScriptExtensions.txt: * admin/unidata/Scripts.txt: * admin/unidata/SpecialCasing.txt: * admin/unidata/UnicodeData.txt: * admin/unidata/confusables.txt: * admin/unidata/emoji-data.txt: * admin/unidata/emoji-sequences.txt: * admin/unidata/emoji-test.txt: * admin/unidata/emoji-variation-sequences.txt: * admin/unidata/emoji-zwj-sequences.txt: Import from Unicode 17.0. * etc/NEWS: * test/lisp/international/ucs-normalize-tests.el (ucs-normalize-tests--failing-lines-part1) (ucs-normalize-tests--failing-lines-part2): * lisp/international/mule-cmds.el (ucs-names): * lisp/international/fontset.el (script-representative-chars) (otf-script-alist): * lisp/international/characters.el: * admin/unidata/blocks.awk: Update for Unicode 17.0. diff --git a/admin/unidata/BidiBrackets.txt b/admin/unidata/BidiBrackets.txt index db4e41b6e6a..c94fe35f89b 100644 --- a/admin/unidata/BidiBrackets.txt +++ b/admin/unidata/BidiBrackets.txt @@ -1,6 +1,6 @@ -# BidiBrackets-16.0.0.txt -# Date: 2024-02-02 -# © 2024 Unicode®, Inc. +# BidiBrackets-17.0.0.txt +# Date: 2025-08-01 +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # diff --git a/admin/unidata/BidiMirroring.txt b/admin/unidata/BidiMirroring.txt index d8f60cb79fe..bb4ea24e46a 100644 --- a/admin/unidata/BidiMirroring.txt +++ b/admin/unidata/BidiMirroring.txt @@ -1,6 +1,6 @@ -# BidiMirroring-16.0.0.txt -# Date: 2024-01-30 -# © 2024 Unicode®, Inc. +# BidiMirroring-17.0.0.txt +# Date: 2025-08-01 +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -16,7 +16,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 16.0.0. +# The repertoire covered by the file is Unicode 17.0.0. # # The file contains a list of lines with mappings from one code point # to another one for character-based mirroring. diff --git a/admin/unidata/Blocks.txt b/admin/unidata/Blocks.txt index 1517dde0cec..5c24ab60cb1 100644 --- a/admin/unidata/Blocks.txt +++ b/admin/unidata/Blocks.txt @@ -1,6 +1,6 @@ -# Blocks-16.0.0.txt -# Date: 2024-02-02 -# © 2024 Unicode®, Inc. +# Blocks-17.0.0.txt +# Date: 2025-08-01 +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -228,6 +228,7 @@ FFF0..FFFF; Specials 108E0..108FF; Hatran 10900..1091F; Phoenician 10920..1093F; Lydian +10940..1095F; Sidetic 10980..1099F; Meroitic Hieroglyphs 109A0..109FF; Meroitic Cursive 10A00..10A5F; Kharoshthi @@ -279,11 +280,13 @@ FFF0..FFFF; Specials 11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A 11AC0..11AFF; Pau Cin Hau 11B00..11B5F; Devanagari Extended-A +11B60..11B7F; Sharada Supplement 11BC0..11BFF; Sunuwar 11C00..11C6F; Bhaiksuki 11C70..11CBF; Marchen 11D00..11D5F; Masaram Gondi 11D60..11DAF; Gunjala Gondi +11DB0..11DEF; Tolong Siki 11EE0..11EFF; Makasar 11F00..11F5F; Kawi 11FB0..11FBF; Lisu Supplement @@ -304,12 +307,14 @@ FFF0..FFFF; Specials 16B00..16B8F; Pahawh Hmong 16D40..16D7F; Kirat Rai 16E40..16E9F; Medefaidrin +16EA0..16EDF; Beria Erfe 16F00..16F9F; Miao 16FE0..16FFF; Ideographic Symbols and Punctuation 17000..187FF; Tangut 18800..18AFF; Tangut Components 18B00..18CFF; Khitan Small Script 18D00..18D7F; Tangut Supplement +18D80..18DFF; Tangut Components Supplement 1AFF0..1AFFF; Kana Extended-B 1B000..1B0FF; Kana Supplement 1B100..1B12F; Kana Extended-A @@ -318,6 +323,7 @@ FFF0..FFFF; Specials 1BC00..1BC9F; Duployan 1BCA0..1BCAF; Shorthand Format Controls 1CC00..1CEBF; Symbols for Legacy Computing Supplement +1CEC0..1CEFF; Miscellaneous Symbols Supplement 1CF00..1CFCF; Znamenny Musical Notation 1D000..1D0FF; Byzantine Musical Symbols 1D100..1D1FF; Musical Symbols @@ -336,6 +342,7 @@ FFF0..FFFF; Specials 1E2C0..1E2FF; Wancho 1E4D0..1E4FF; Nag Mundari 1E5D0..1E5FF; Ol Onal +1E6C0..1E6FF; Tai Yo 1E7E0..1E7FF; Ethiopic Extended-B 1E800..1E8DF; Mende Kikakui 1E900..1E95F; Adlam @@ -367,6 +374,7 @@ FFF0..FFFF; Specials 2F800..2FA1F; CJK Compatibility Ideographs Supplement 30000..3134F; CJK Unified Ideographs Extension G 31350..323AF; CJK Unified Ideographs Extension H +323B0..3347F; CJK Unified Ideographs Extension J E0000..E007F; Tags E0100..E01EF; Variation Selectors Supplement F0000..FFFFF; Supplementary Private Use Area-A diff --git a/admin/unidata/IVD_Sequences.txt b/admin/unidata/IVD_Sequences.txt index 86a4ab5138f..83498bc4b46 100644 --- a/admin/unidata/IVD_Sequences.txt +++ b/admin/unidata/IVD_Sequences.txt @@ -2,6 +2,9 @@ # # History: # +# 2025-07-14 Combined registration of the CAAPH collection and of +# sequences in that collection. +# # 2022-09-13 Registration of additional sequences in the Adobe-Japan1 # collection. # @@ -35,8 +38,8 @@ # For more details on the IVD, see UTS #37: # https://www.unicode.org/reports/tr37/ # -# Copyright 2006-2022 Unicode, Inc. -# For terms of use, see: https://www.unicode.org/copyright.html#8 +# Copyright 2006–2025 Unicode, Inc. +# For terms of use, see: https://www.unicode.org/copyright.html # 3402 E0100; Adobe-Japan1; CID+13698 3402 E0101; Adobe-Japan1; CID+13697 @@ -202,6 +205,8 @@ 355C E0101; Moji_Joho; MJ000312 355D E0100; Adobe-Japan1; CID+17341 355E E0100; Adobe-Japan1; CID+17342 +3560 E0100; CAAPH; J0027 +3560 E0101; CAAPH; J8081 3561 E0100; Moji_Joho; MJ000317 3561 E0101; Moji_Joho; MJ000318 3563 E0100; Adobe-Japan1; CID+17344 @@ -512,6 +517,8 @@ 3AA4 E0101; Moji_Joho; MJ001536 3AB4 E0100; Hanyo-Denshi; IA2313 3AB4 E0101; Hanyo-Denshi; TK01037540 +3AB4 E0102; CAAPH; M8076 +3AB4 E0103; CAAPH; J8083 3AC4 E0100; Adobe-Japan1; CID+20135 3AC4 E0101; Moji_Joho; MJ001566 3AC4 E0102; Moji_Joho; MJ059671 @@ -1923,6 +1930,8 @@ 4E2D E0100; Adobe-Japan1; CID+2980 4E2D E0101; Hanyo-Denshi; JA3570 4E2D E0102; Hanyo-Denshi; TK01000430 +4E2D E0103; CAAPH; M8107 +4E2D E0104; CAAPH; J8115 4E2E E0100; Adobe-Japan1; CID+17238 4E2F E0100; Adobe-Japan1; CID+14300 4E30 E0100; Adobe-Japan1; CID+14301 @@ -2075,6 +2084,8 @@ 4E99 E0101; Hanyo-Denshi; JA4742 4E99 E0102; Hanyo-Denshi; TK01001160 4E9B E0100; Adobe-Japan1; CID+2083 +4E9B E0101; CAAPH; M8061 +4E9B E0102; CAAPH; J8063 4E9C E0100; Adobe-Japan1; CID+1125 4E9D E0100; Adobe-Japan1; CID+17245 4E9E E0100; Adobe-Japan1; CID+4108 @@ -2121,6 +2132,8 @@ 4EA8 E0101; Moji_Joho; MJ006473 4EA8 E0102; Hanyo-Denshi; KS003720 4EA8 E0102; Moji_Joho; MJ056890 +4EA8 E0103; CAAPH; M8138 +4EA8 E0104; CAAPH; G8008 4EAB E0100; Adobe-Japan1; CID+1687 4EAB E0101; Hanyo-Denshi; JA2193 4EAB E0101; Moji_Joho; MJ006474 @@ -2644,6 +2657,8 @@ 5026 E0102; Moji_Joho; MJ006859 5026 E0103; Hanyo-Denshi; FT1790 5026 E0103; Moji_Joho; MJ006858 +5026 E0104; CAAPH; M8128 +5026 E0105; CAAPH; I8002 5027 E0100; Adobe-Japan1; CID+14331 5028 E0100; Adobe-Japan1; CID+4155 5029 E0100; Adobe-Japan1; CID+4163 @@ -2654,6 +2669,8 @@ 5029 E0103; MSARG; MB_ADC5 5029 E0104; MSARG; ME_5029_001 502A E0100; Adobe-Japan1; CID+4157 +502A E0101; CAAPH; M8065 +502A E0102; CAAPH; J8067 502B E0100; Adobe-Japan1; CID+3993 502B E0101; Hanyo-Denshi; JA4649 502B E0102; Hanyo-Denshi; TK01004100 @@ -2673,6 +2690,8 @@ 5036 E0101; Moji_Joho; MJ006878 5036 E0102; Hanyo-Denshi; JTAD66 5036 E0102; Moji_Joho; MJ006879 +5036 E0103; CAAPH; M8097 +5036 E0104; CAAPH; J8105 5039 E0100; Adobe-Japan1; CID+1862 503B E0100; Adobe-Japan1; CID+14336 5040 E0100; Adobe-Japan1; CID+8383 @@ -2953,6 +2972,8 @@ 50D4 E0100; Adobe-Japan1; CID+17292 50D5 E0100; Adobe-Japan1; CID+3707 50D6 E0100; Adobe-Japan1; CID+4188 +50D6 E0101; CAAPH; M8111 +50D6 E0102; CAAPH; J8118 50D8 E0100; Adobe-Japan1; CID+8392 50D8 E0101; Hanyo-Denshi; JB1827 50D8 E0102; Hanyo-Denshi; TK01006030 @@ -3087,6 +3108,8 @@ 5114 E0101; Moji_Joho; MJ007151 5114 E0102; Hanyo-Denshi; JTADAC 5114 E0102; Moji_Joho; MJ007152 +5114 E0103; CAAPH; M8028 +5114 E0104; CAAPH; J8027 5115 E0100; Adobe-Japan1; CID+4200 5116 E0100; Adobe-Japan1; CID+4199 5117 E0100; Adobe-Japan1; CID+17296 @@ -3278,6 +3301,8 @@ 5169 E0101; Moji_Joho; MJ007270 5169 E0102; Hanyo-Denshi; JTADC7 5169 E0102; Moji_Joho; MJ007269 +5169 E0103; CAAPH; M8011 +5169 E0104; CAAPH; J8010 516A E0100; Adobe-Japan1; CID+4216 516A E0101; Hanyo-Denshi; JA4933 516A E0101; Moji_Joho; MJ007271 @@ -3724,6 +3749,8 @@ 5258 E0100; Adobe-Japan1; CID+21194 525A E0100; Adobe-Japan1; CID+19191 525B E0100; Adobe-Japan1; CID+2038 +525B E0101; CAAPH; M8059 +525B E0102; CAAPH; J8061 525C E0100; Adobe-Japan1; CID+17314 525D E0100; Adobe-Japan1; CID+7774 525E E0100; Adobe-Japan1; CID+4263 @@ -3808,6 +3835,8 @@ 528D E0101; Adobe-Japan1; CID+14106 528D E0102; Hanyo-Denshi; JA4988 528D E0103; Hanyo-Denshi; TK01010190 +528D E0104; CAAPH; M8007 +528D E0105; CAAPH; J8007 5291 E0100; Adobe-Japan1; CID+4276 5291 E0101; Hanyo-Denshi; JA4993 5291 E0101; Moji_Joho; MJ007609 @@ -3959,6 +3988,8 @@ 52DD E0102; Moji_Joho; MJ007701 52DD E0103; Hanyo-Denshi; JTAE44 52DD E0103; Moji_Joho; MJ007700 +52DD E0104; CAAPH; M8068 +52DD E0105; CAAPH; J8071 52DE E0100; Adobe-Japan1; CID+4286 52DF E0100; Adobe-Japan1; CID+3639 52DF E0101; Hanyo-Denshi; JA4271 @@ -4039,6 +4070,8 @@ 52F8 E0102; Hanyo-Denshi; KS028870 52F8 E0102; Moji_Joho; MJ007741 52F8 E0103; Hanyo-Denshi; TK01011360 +52F8 E0104; CAAPH; M8075 +52F8 E0105; CAAPH; J8082 52F9 E0100; Adobe-Japan1; CID+4294 52F9 E0101; Moji_Joho; MJ007742 52F9 E0102; Moji_Joho; MJ007743 @@ -4309,6 +4342,8 @@ 5377 E0104; Moji_Joho; MJ057415 5377 E0105; Hanyo-Denshi; TK01007370 5377 E0106; Moji_Joho; MJ007899 +5377 E0107; CAAPH; M8132 +5377 E0108; CAAPH; I8006 5378 E0100; Adobe-Japan1; CID+1335 5378 E0101; Adobe-Japan1; CID+13663 5378 E0102; Moji_Joho; MJ007902 @@ -4427,6 +4462,8 @@ 53C8 E0100; Adobe-Japan1; CID+3746 53C8 E0101; Moji_Joho; MJ007985 53C8 E0102; Moji_Joho; MJ007986 +53C8 E0103; CAAPH; M8094 +53C8 E0104; CAAPH; J8102 53C9 E0100; Adobe-Japan1; CID+2085 53C9 E0101; Adobe-Japan1; CID+20281 53C9 E0102; Moji_Joho; MJ007987 @@ -4667,6 +4704,8 @@ 5462 E0100; Adobe-Japan1; CID+17350 5464 E0100; Adobe-Japan1; CID+21258 5466 E0100; Adobe-Japan1; CID+14377 +5466 E0101; CAAPH; M8036 +5466 E0102; CAAPH; J8036 5467 E0100; Adobe-Japan1; CID+21259 5468 E0100; Adobe-Japan1; CID+13815 5468 E0101; Adobe-Japan1; CID+2346 @@ -4730,6 +4769,8 @@ 5492 E0100; Adobe-Japan1; CID+4357 5492 E0101; Hanyo-Denshi; JA5080 5492 E0102; Hanyo-Denshi; TK01014080 +5492 E0103; CAAPH; M8081 +5492 E0104; CAAPH; J8088 5495 E0100; Adobe-Japan1; CID+17352 5496 E0100; Adobe-Japan1; CID+14381 549C E0100; Adobe-Japan1; CID+8411 @@ -4969,6 +5010,8 @@ 555A E0103; Moji_Joho; MJ057180 555A E0104; MSARG; MD_555A 555A E0105; MSARG; ME_555A_001 +555A E0106; CAAPH; M8005 +555A E0107; CAAPH; J8005 555B E0100; Adobe-Japan1; CID+21282 555C E0100; Adobe-Japan1; CID+4392 555D E0100; Adobe-Japan1; CID+4398 @@ -5055,6 +5098,8 @@ 5599 E0103; Moji_Joho; MJ008461 5599 E0104; Moji_Joho; MJ008459 559A E0100; Adobe-Japan1; CID+1513 +559A E0101; CAAPH; M8016 +559A E0102; CAAPH; J8015 559C E0100; Adobe-Japan1; CID+1578 559C E0101; Adobe-Japan1; CID+20091 559C E0102; Hanyo-Denshi; JA2078 @@ -5368,6 +5413,8 @@ 5668 E0108; Hanyo-Denshi; TK01015360 5668 E0109; Hanyo-Denshi; TK01019600 5668 E010A; Hanyo-Denshi; TK01019620 +5668 E010B; CAAPH; M8096 +5668 E010C; CAAPH; J8104 5669 E0100; Adobe-Japan1; CID+14405 566A E0100; Adobe-Japan1; CID+4439 566B E0100; Adobe-Japan1; CID+4435 @@ -5495,6 +5542,8 @@ 56B3 E0101; Hanyo-Denshi; JB2271 56B3 E0102; Hanyo-Denshi; TK01015730 56B4 E0100; Adobe-Japan1; CID+4449 +56B4 E0101; CAAPH; M8044 +56B4 E0102; CAAPH; J8045 56B6 E0100; Adobe-Japan1; CID+4448 56B7 E0100; Adobe-Japan1; CID+19267 56BC E0100; Adobe-Japan1; CID+4451 @@ -5618,6 +5667,8 @@ 570A E0102; Hanyo-Denshi; IB0639 570A E0102; Moji_Joho; MJ008865 570B E0100; Adobe-Japan1; CID+4467 +570B E0101; CAAPH; M8030 +570B E0102; CAAPH; J8029 570C E0100; Adobe-Japan1; CID+19276 570D E0100; Adobe-Japan1; CID+4468 570D E0101; Adobe-Japan1; CID+13528 @@ -5627,6 +5678,8 @@ 570D E0103; Moji_Joho; MJ008869 570D E0104; Moji_Joho; MJ008870 570D E0105; Moji_Joho; MJ008871 +570D E0106; CAAPH; M8046 +570D E0107; CAAPH; J8047 570F E0100; Adobe-Japan1; CID+1869 5711 E0100; Adobe-Japan1; CID+21319 5711 E0101; Hanyo-Denshi; JB2308 @@ -5635,6 +5688,8 @@ 5711 E0102; Moji_Joho; MJ008875 5711 E0103; Moji_Joho; MJ059444 5712 E0100; Adobe-Japan1; CID+1282 +5712 E0101; CAAPH; M8137 +5712 E0102; CAAPH; G8007 5713 E0100; Adobe-Japan1; CID+4469 5715 E0100; Adobe-Japan1; CID+14418 5716 E0100; Adobe-Japan1; CID+4471 @@ -5644,6 +5699,8 @@ 5716 E0102; Moji_Joho; MJ057207 5716 E0103; Hanyo-Denshi; JTAF44 5716 E0103; Moji_Joho; MJ008881 +5716 E0104; CAAPH; M8114 +5716 E0105; CAAPH; J8121 5717 E0100; Hanyo-Denshi; IP5717 5717 E0100; Moji_Joho; MJ008882 5717 E0101; Hanyo-Denshi; KS055250 @@ -6422,6 +6479,8 @@ 592C E0100; Adobe-Japan1; CID+4544 592D E0100; Adobe-Japan1; CID+4545 592E E0100; Adobe-Japan1; CID+1309 +592E E0101; CAAPH; M8108 +592E E0102; CAAPH; J8116 592F E0100; Adobe-Japan1; CID+14446 5930 E0100; Adobe-Japan1; CID+21377 5931 E0100; Adobe-Japan1; CID+2278 @@ -7146,6 +7205,8 @@ 5BA4 E0102; Hanyo-Denshi; TK01021850 5BA5 E0100; Adobe-Japan1; CID+3858 5BA6 E0100; Adobe-Japan1; CID+4624 +5BA7 E0100; CAAPH; M8066 +5BA7 E0101; CAAPH; J8068 5BA8 E0100; Adobe-Japan1; CID+21435 5BA9 E0100; Adobe-Japan1; CID+21436 5BAC E0100; Adobe-Japan1; CID+17527 @@ -7374,6 +7435,8 @@ 5C07 E0103; Moji_Joho; MJ059513 5C07 E0104; Hanyo-Denshi; IB1682 5C07 E0104; Moji_Joho; MJ058022 +5C07 E0105; CAAPH; M8135 +5C07 E0106; CAAPH; G8003 5C08 E0100; Adobe-Japan1; CID+4642 5C08 E0101; Hanyo-Denshi; JA5383 5C08 E0101; Moji_Joho; MJ010272 @@ -7965,6 +8028,8 @@ 5DE5 E0101; Adobe-Japan1; CID+13763 5DE5 E0102; Hanyo-Denshi; JA2509 5DE5 E0103; Hanyo-Denshi; TK01001100 +5DE5 E0104; CAAPH; M8133 +5DE5 E0105; CAAPH; G8002 5DE6 E0100; Adobe-Japan1; CID+2088 5DE6 E0101; Hanyo-Denshi; JA2624 5DE6 E0101; Moji_Joho; MJ010774 @@ -8230,6 +8295,8 @@ 5E73 E0102; Moji_Joho; MJ010943 5E73 E0103; Hanyo-Denshi; JTB0BF 5E73 E0103; Moji_Joho; MJ010942 +5E73 E0104; CAAPH; M8048 +5E73 E0105; CAAPH; J8049 5E74 E0100; Adobe-Japan1; CID+3301 5E74 E0101; Hanyo-Denshi; JA3915 5E74 E0101; Moji_Joho; MJ010944 @@ -8299,6 +8366,8 @@ 5EA6 E0102; Moji_Joho; MJ057439 5EA7 E0100; Adobe-Japan1; CID+2098 5EA7 E0101; Adobe-Japan1; CID+20114 +5EA7 E0102; CAAPH; M8100 +5EA7 E0103; CAAPH; J8108 5EA8 E0100; Adobe-Japan1; CID+14506 5EAA E0100; Adobe-Japan1; CID+14507 5EAB E0100; Adobe-Japan1; CID+1919 @@ -8564,6 +8633,8 @@ 5F13 E0102; Hanyo-Denshi; KS109620 5F13 E0102; Moji_Joho; MJ057459 5F13 E0103; Moji_Joho; MJ059569 +5F13 E0104; CAAPH; M8121 +5F13 E0105; CAAPH; J8129 5F14 E0100; Adobe-Japan1; CID+3008 5F14 E0101; Hanyo-Denshi; JA3604 5F14 E0101; Moji_Joho; MJ011150 @@ -9077,6 +9148,8 @@ 6050 E0103; Hanyo-Denshi; KS120450 6050 E0103; Moji_Joho; MJ057504 6050 E0104; Hanyo-Denshi; TK01031760 +6050 E0105; CAAPH; M8057 +6050 E0106; CAAPH; J8058 6051 E0100; Adobe-Japan1; CID+21546 6052 E0100; Adobe-Japan1; CID+1987 6054 E0100; Adobe-Japan1; CID+19359 @@ -9729,6 +9802,8 @@ 61C6 E0100; Adobe-Japan1; CID+4915 61C7 E0100; Adobe-Japan1; CID+2073 61C8 E0100; Adobe-Japan1; CID+4913 +61C8 E0101; CAAPH; M8146 +61C8 E0102; CAAPH; J8140 61C9 E0100; Adobe-Japan1; CID+4911 61CA E0100; Adobe-Japan1; CID+4910 61CA E0101; Hanyo-Denshi; JA5669 @@ -9920,6 +9995,8 @@ 6230 E0100; Adobe-Japan1; CID+4940 6230 E0101; Hanyo-Denshi; JA5705 6230 E0102; Hanyo-Denshi; TK01034890 +6230 E0103; CAAPH; M8003 +6230 E0104; CAAPH; J8003 6231 E0100; Adobe-Japan1; CID+19381 6232 E0100; Adobe-Japan1; CID+4941 6233 E0100; Adobe-Japan1; CID+4942 @@ -10006,6 +10083,8 @@ 6255 E0100; Adobe-Japan1; CID+3575 6256 E0100; Adobe-Japan1; CID+14563 6258 E0100; Adobe-Japan1; CID+2897 +6259 E0100; CAAPH; M8049 +6259 E0101; CAAPH; J8050 625A E0100; Adobe-Japan1; CID+16872 625A E0101; Hanyo-Denshi; JB3129 625A E0101; Moji_Joho; MJ012153 @@ -10158,6 +10237,8 @@ 62D9 E0100; Adobe-Japan1; CID+2687 62DA E0100; Adobe-Japan1; CID+19387 62DB E0100; Adobe-Japan1; CID+2463 +62DB E0101; CAAPH; M8033 +62DB E0102; CAAPH; J8033 62DC E0100; Adobe-Japan1; CID+4968 62DD E0100; Adobe-Japan1; CID+3336 62E0 E0100; Adobe-Japan1; CID+1676 @@ -10201,6 +10282,8 @@ 6303 E0100; Adobe-Japan1; CID+17669 6304 E0100; Adobe-Japan1; CID+21626 6307 E0100; Adobe-Japan1; CID+2214 +6307 E0101; CAAPH; M8042 +6307 E0102; CAAPH; J8042 6308 E0100; Adobe-Japan1; CID+4980 6308 E0101; Hanyo-Denshi; JA5745 6308 E0101; Moji_Joho; MJ012328 @@ -10341,6 +10424,8 @@ 6372 E0102; Moji_Joho; MJ012438 6372 E0103; Hanyo-Denshi; FT1792 6372 E0103; Moji_Joho; MJ012437 +6372 E0104; CAAPH; M8129 +6372 E0105; CAAPH; I8003 6374 E0100; Adobe-Japan1; CID+14573 6375 E0100; Adobe-Japan1; CID+19396 6376 E0100; Adobe-Japan1; CID+4992 @@ -10477,6 +10562,8 @@ 63DA E0101; Hanyo-Denshi; JA4540 63DA E0102; Hanyo-Denshi; TK01035720 63DB E0100; Adobe-Japan1; CID+1525 +63DB E0101; CAAPH; M8022 +63DB E0102; CAAPH; J8021 63DC E0100; Adobe-Japan1; CID+14580 63DE E0100; Hanyo-Denshi; IP63DE 63DE E0100; Moji_Joho; MJ012554 @@ -10537,6 +10624,8 @@ 640D E0101; Moji_Joho; MJ012600 640D E0102; Hanyo-Denshi; KS139720 640D E0102; Moji_Joho; MJ012599 +640D E0103; CAAPH; M8056 +640D E0104; CAAPH; J8057 640F E0100; Adobe-Japan1; CID+5018 640F E0101; Adobe-Japan1; CID+13545 640F E0102; Hanyo-Denshi; JA5783 @@ -10767,6 +10856,8 @@ 64AB E0100; Adobe-Japan1; CID+3553 64AC E0100; Adobe-Japan1; CID+19419 64AD E0100; Adobe-Japan1; CID+3323 +64AD E0101; CAAPH; M8113 +64AD E0102; CAAPH; J8120 64AE E0100; Adobe-Japan1; CID+2161 64B0 E0100; Adobe-Japan1; CID+2709 64B0 E0101; Adobe-Japan1; CID+7716 @@ -11372,6 +11463,8 @@ 661E E0104; Moji_Joho; MJ013221 661F E0100; Adobe-Japan1; CID+2645 6620 E0100; Adobe-Japan1; CID+1257 +6620 E0101; CAAPH; M8105 +6620 E0102; CAAPH; J8113 6621 E0100; Adobe-Japan1; CID+17736 6621 E0101; Hanyo-Denshi; JB3402 6621 E0102; Hanyo-Denshi; TK01038300 @@ -11397,6 +11490,8 @@ 662C E0102; Hanyo-Denshi; KS156810 662C E0102; Moji_Joho; MJ057666 662D E0100; Adobe-Japan1; CID+2468 +662D E0101; CAAPH; M8006 +662D E0102; CAAPH; J8006 662E E0100; Adobe-Japan1; CID+8475 662F E0100; Adobe-Japan1; CID+2635 6630 E0100; Adobe-Japan1; CID+16885 @@ -11916,6 +12011,8 @@ 671B E0108; Hanyo-Denshi; TK01042170 671B E0109; Hanyo-Denshi; TK01058220 671B E010A; Moji_Joho; MJ013551 +671B E010B; CAAPH; M8117 +671B E010C; CAAPH; J8124 671C E0100; Adobe-Japan1; CID+21732 671D E0100; Adobe-Japan1; CID+3015 671D E0101; Adobe-Japan1; CID+13931 @@ -12477,6 +12574,8 @@ 6886 E0101; Moji_Joho; MJ013962 6886 E0102; Hanyo-Denshi; JTB32A 6886 E0102; Moji_Joho; MJ013963 +6886 E0103; CAAPH; M8082 +6886 E0104; CAAPH; J8090 6888 E0100; Adobe-Japan1; CID+21764 6889 E0100; Hanyo-Denshi; IP6889 6889 E0101; Hanyo-Denshi; TK01043780 @@ -12776,6 +12875,8 @@ 6957 E0100; Adobe-Japan1; CID+14647 6957 E0101; Moji_Joho; MJ014198 6957 E0102; Moji_Joho; MJ014199 +6958 E0100; CAAPH; M8123 +6958 E0101; CAAPH; J8131 6959 E0100; Adobe-Japan1; CID+5247 695A E0100; Adobe-Japan1; CID+2753 695B E0100; Adobe-Japan1; CID+19459 @@ -12922,6 +13023,8 @@ 69B1 E0100; Adobe-Japan1; CID+5284 69B2 E0100; Adobe-Japan1; CID+5254 69B4 E0100; Adobe-Japan1; CID+5273 +69B4 E0101; CAAPH; M8017 +69B4 E0102; CAAPH; J8016 69B6 E0100; Hanyo-Denshi; IP69B6 69B6 E0101; Hanyo-Denshi; TK01045800 69B7 E0100; Adobe-Japan1; CID+14654 @@ -13073,6 +13176,8 @@ 6A02 E0100; Adobe-Japan1; CID+5276 6A02 E0101; Hanyo-Denshi; JA6059 6A02 E0102; Hanyo-Denshi; TK01045600 +6A02 E0103; CAAPH; M8091 +6A02 E0104; CAAPH; J8099 6A03 E0100; Adobe-Japan1; CID+21793 6A05 E0100; Adobe-Japan1; CID+5283 6A0A E0100; Adobe-Japan1; CID+5289 @@ -13739,6 +13844,8 @@ 6BB3 E0101; Moji_Joho; MJ014908 6BB3 E0102; Hanyo-Denshi; KS188360 6BB3 E0102; Moji_Joho; MJ014909 +6BB3 E0103; CAAPH; M8122 +6BB3 E0104; CAAPH; J8130 6BB4 E0100; Adobe-Japan1; CID+1317 6BB5 E0100; Adobe-Japan1; CID+2952 6BB7 E0100; Adobe-Japan1; CID+5365 @@ -13758,6 +13865,8 @@ 6BBB E0101; Adobe-Japan1; CID+13424 6BBB E0102; Moji_Joho; MJ014917 6BBB E0103; Moji_Joho; MJ014918 +6BBB E0104; CAAPH; M8089 +6BBB E0105; CAAPH; J8097 6BBC E0100; Adobe-Japan1; CID+5366 6BBC E0101; Moji_Joho; MJ014919 6BBC E0102; Moji_Joho; MJ014920 @@ -13838,6 +13947,8 @@ 6C08 E0106; Moji_Joho; MJ014995 6C09 E0100; Adobe-Japan1; CID+19482 6C0A E0100; Adobe-Japan1; CID+17907 +6C0A E0101; CAAPH; M8055 +6C0A E0102; CAAPH; J8056 6C0D E0100; Adobe-Japan1; CID+19483 6C0E E0100; Adobe-Japan1; CID+17908 6C0E E0101; Hanyo-Denshi; JB3840 @@ -14058,6 +14169,8 @@ 6CBA E0100; Adobe-Japan1; CID+5406 6CBB E0100; Adobe-Japan1; CID+2255 6CBC E0100; Adobe-Japan1; CID+2474 +6CBC E0101; CAAPH; M8020 +6CBC E0102; CAAPH; J8019 6CBD E0100; Adobe-Japan1; CID+5399 6CBE E0100; Adobe-Japan1; CID+5405 6CBF E0100; Adobe-Japan1; CID+13656 @@ -14168,6 +14281,8 @@ 6D1A E0101; Hanyo-Denshi; JB3918 6D1A E0102; Hanyo-Denshi; TK01049660 6D1B E0100; Adobe-Japan1; CID+3926 +6D1B E0101; CAAPH; M8078 +6D1B E0102; CAAPH; J8085 6D1E E0100; Adobe-Japan1; CID+3214 6D1F E0100; Adobe-Japan1; CID+5411 6D24 E0100; Adobe-Japan1; CID+17927 @@ -14430,6 +14545,8 @@ 6DF5 E0103; Moji_Joho; MJ059782 6DF5 E0104; Hanyo-Denshi; JTB43C 6DF5 E0104; Moji_Joho; MJ059783 +6DF5 E0105; CAAPH; M8102 +6DF5 E0106; CAAPH; J8110 6DF6 E0100; Adobe-Japan1; CID+17954 6DF7 E0100; Adobe-Japan1; CID+2078 6DF8 E0100; Adobe-Japan1; CID+8521 @@ -14817,6 +14934,8 @@ 6EFF E0104; Hanyo-Denshi; JTB49BS 6EFF E0104; Moji_Joho; MJ059814 6EFF E0105; Hanyo-Denshi; TK01052000 +6EFF E0106; CAAPH; M8104 +6EFF E0107; CAAPH; J8112 6F01 E0100; Adobe-Japan1; CID+1683 6F01 E0101; Hanyo-Denshi; JA2189 6F01 E0101; Moji_Joho; MJ015800 @@ -15541,6 +15660,8 @@ 70C8 E0100; Adobe-Japan1; CID+4029 70CA E0100; Adobe-Japan1; CID+18020 70CB E0100; Adobe-Japan1; CID+5561 +70CE E0100; CAAPH; M8110 +70CE E0101; CAAPH; J8117 70CF E0100; Adobe-Japan1; CID+1226 70D1 E0100; Adobe-Japan1; CID+18021 70D3 E0100; Adobe-Japan1; CID+14754 @@ -15610,6 +15731,9 @@ 7136 E0100; Adobe-Japan1; CID+2741 7136 E0101; Moji_Joho; MJ016458 7136 E0102; Moji_Joho; MJ057997 +7136 E0103; CAAPH; M8072 +7136 E0104; CAAPH; J8077 +7136 E0105; CAAPH; J8078 7138 E0100; Adobe-Japan1; CID+21930 713C E0100; Adobe-Japan1; CID+2478 7141 E0100; Adobe-Japan1; CID+21931 @@ -15673,6 +15797,9 @@ 7165 E0100; Adobe-Japan1; CID+5568 7166 E0100; Adobe-Japan1; CID+5571 7167 E0100; Adobe-Japan1; CID+2480 +7167 E0101; CAAPH; M8026 +7167 E0102; CAAPH; J8025 +7167 E0103; CAAPH; J8059 7168 E0100; Adobe-Japan1; CID+16962 7169 E0100; Adobe-Japan1; CID+3429 716C E0100; Adobe-Japan1; CID+5575 @@ -15986,6 +16113,8 @@ 7240 E0101; Moji_Joho; MJ016766 7240 E0102; Hanyo-Denshi; FT2325 7240 E0102; Moji_Joho; MJ016767 +7240 E0103; CAAPH; M8043 +7240 E0104; CAAPH; J8043 7241 E0100; Adobe-Japan1; CID+14774 7242 E0100; Adobe-Japan1; CID+18046 7243 E0100; Adobe-Japan1; CID+19523 @@ -16003,6 +16132,8 @@ 7247 E0103; Hanyo-Denshi; JTB573 7247 E0103; Moji_Joho; MJ016777 7247 E0104; Hanyo-Denshi; TK01056920 +7247 E0105; CAAPH; M8103 +7247 E0106; CAAPH; J8111 7248 E0100; Adobe-Japan1; CID+3419 724B E0100; Adobe-Japan1; CID+5609 724C E0100; Adobe-Japan1; CID+3341 @@ -16227,6 +16358,11 @@ 732B E0102; Moji_Joho; MJ017010 732C E0100; Adobe-Japan1; CID+18071 732E E0100; Adobe-Japan1; CID+1881 +732E E0101; CAAPH; M8127 +732E E0102; CAAPH; J8133 +732E E0103; CAAPH; J8134 +732E E0104; CAAPH; J8135 +732E E0105; CAAPH; J8136 732F E0100; Adobe-Japan1; CID+5639 7330 E0100; Hanyo-Denshi; IP7330 7330 E0100; Moji_Joho; MJ017015 @@ -16375,6 +16511,8 @@ 7394 E0100; Adobe-Japan1; CID+18083 7395 E0100; Adobe-Japan1; CID+14794 7396 E0100; Adobe-Japan1; CID+1762 +7396 E0101; CAAPH; M8099 +7396 E0102; CAAPH; J8107 7397 E0100; Adobe-Japan1; CID+21980 7398 E0100; Adobe-Japan1; CID+18084 7398 E0101; Hanyo-Denshi; JB4355 @@ -16517,6 +16655,8 @@ 7408 E0100; Hanyo-Denshi; IP7408 7408 E0101; Hanyo-Denshi; TK01058360 7409 E0100; Adobe-Japan1; CID+3960 +7409 E0101; CAAPH; M8098 +7409 E0102; CAAPH; J8106 740A E0100; Adobe-Japan1; CID+14809 740A E0101; Hanyo-Denshi; JB4406 740A E0101; Moji_Joho; MJ017262 @@ -17067,6 +17207,8 @@ 753B E0102; Moji_Joho; MJ017646 753B E0103; Hanyo-Denshi; TK01009560 753B E0104; Hanyo-Denshi; TK01060450 +753B E0105; CAAPH; M8106 +753B E0106; CAAPH; J8114 753C E0100; Adobe-Japan1; CID+5709 753D E0100; Adobe-Japan1; CID+18125 753E E0100; Adobe-Japan1; CID+18126 @@ -17507,6 +17649,8 @@ 7684 E0103; Moji_Joho; MJ017994 7685 E0100; Adobe-Japan1; CID+22037 7686 E0100; Adobe-Japan1; CID+1413 +7686 E0101; CAAPH; M8080 +7686 E0102; CAAPH; J8087 7687 E0100; Adobe-Japan1; CID+2006 7688 E0100; Adobe-Japan1; CID+5788 768A E0100; Hanyo-Denshi; IP768A @@ -17818,6 +17962,8 @@ 775F E0100; Adobe-Japan1; CID+14877 7760 E0100; Adobe-Japan1; CID+14878 7761 E0100; Adobe-Japan1; CID+2605 +7761 E0101; CAAPH; M8027 +7761 E0102; CAAPH; J8026 7762 E0100; Adobe-Japan1; CID+7877 7763 E0100; Adobe-Japan1; CID+3228 7764 E0100; Adobe-Japan1; CID+19587 @@ -17936,6 +18082,8 @@ 77B7 E0100; Adobe-Japan1; CID+19596 77B9 E0100; Adobe-Japan1; CID+5838 77BB E0100; Adobe-Japan1; CID+5842 +77BB E0101; CAAPH; M8040 +77BB E0102; CAAPH; J8040 77BC E0100; Adobe-Japan1; CID+5840 77BD E0100; Adobe-Japan1; CID+5841 77BE E0100; Adobe-Japan1; CID+19597 @@ -17980,6 +18128,9 @@ 77E0 E0100; Adobe-Japan1; CID+17004 77E2 E0100; Adobe-Japan1; CID+3836 77E3 E0100; Adobe-Japan1; CID+5848 +77E3 E0101; CAAPH; M8019 +77E3 E0102; CAAPH; J8018 +77E3 E0103; CAAPH; J8030 77E4 E0100; Adobe-Japan1; CID+18205 77E5 E0100; Adobe-Japan1; CID+2956 77E6 E0100; Adobe-Japan1; CID+14883 @@ -18828,6 +18979,8 @@ 79A7 E0103; Moji_Joho; MJ018944 79A7 E0104; Hanyo-Denshi; TK01066110 79A7 E0105; Hanyo-Denshi; TK01066220 +79A7 E0106; CAAPH; M8067 +79A7 E0107; CAAPH; J8069 79A8 E0100; Adobe-Japan1; CID+22116 79A8 E0101; Hanyo-Denshi; JB4876 79A8 E0101; Moji_Joho; MJ018949 @@ -19373,6 +19526,8 @@ 7AE0 E0101; Moji_Joho; MJ019332 7AE0 E0102; Hanyo-Denshi; JTB78C 7AE0 E0102; Moji_Joho; MJ019333 +7AE0 E0103; CAAPH; M8074 +7AE0 E0104; CAAPH; J8080 7AE1 E0100; Adobe-Japan1; CID+5953 7AE2 E0100; Adobe-Japan1; CID+5954 7AE3 E0100; Adobe-Japan1; CID+2401 @@ -19692,6 +19847,8 @@ 7BC9 E0102; Moji_Joho; MJ019592 7BC9 E0103; Hanyo-Denshi; KS294020 7BC9 E0103; Moji_Joho; MJ019593 +7BC9 E0104; CAAPH; M8136 +7BC9 E0105; CAAPH; G8006 7BCA E0100; Adobe-Japan1; CID+18301 7BCB E0100; Adobe-Japan1; CID+5995 7BCC E0100; Adobe-Japan1; CID+5997 @@ -19857,6 +20014,8 @@ 7C3E E0104; Moji_Joho; MJ019721 7C3E E0105; Hanyo-Denshi; JTB7DD 7C3E E0105; Moji_Joho; MJ019723 +7C3E E0106; CAAPH; M8071 +7C3E E0107; CAAPH; J8076 7C3F E0100; Adobe-Japan1; CID+3645 7C3F E0101; Adobe-Japan1; CID+14018 7C3F E0102; Hanyo-Denshi; JA4277 @@ -20306,6 +20465,8 @@ 7D42 E0103; Hanyo-Denshi; JTB813 7D42 E0103; Moji_Joho; MJ020046 7D43 E0100; Adobe-Japan1; CID+1906 +7D43 E0101; CAAPH; M8077 +7D43 E0102; CAAPH; J8084 7D44 E0100; Adobe-Japan1; CID+2762 7D44 E0101; Hanyo-Denshi; JA3340 7D44 E0102; Hanyo-Denshi; TK01071700 @@ -20487,6 +20648,8 @@ 7DA3 E0101; Moji_Joho; MJ020175 7DA3 E0102; Hanyo-Denshi; FT2419 7DA3 E0102; Moji_Joho; MJ020176 +7DA3 E0103; CAAPH; M8131 +7DA3 E0104; CAAPH; I8005 7DA6 E0100; Adobe-Japan1; CID+17043 7DA7 E0100; Adobe-Japan1; CID+18357 7DAA E0100; Adobe-Japan1; CID+18358 @@ -20671,6 +20834,8 @@ 7E02 E0100; Moji_Joho; MJ020291 7E02 E0101; Hanyo-Denshi; KS309910 7E02 E0101; Moji_Joho; MJ020292 +7E02 E0102; CAAPH; M8010 +7E02 E0103; CAAPH; B8001 7E04 E0100; Adobe-Japan1; CID+3268 7E05 E0100; Adobe-Japan1; CID+6110 7E08 E0100; Adobe-Japan1; CID+14986 @@ -20735,6 +20900,8 @@ 7E23 E0100; Adobe-Japan1; CID+6112 7E23 E0101; Hanyo-Denshi; JA6949 7E23 E0102; Hanyo-Denshi; TK01072490 +7E23 E0103; CAAPH; M8118 +7E23 E0104; CAAPH; J8125 7E26 E0100; Adobe-Japan1; CID+2382 7E27 E0100; Adobe-Japan1; CID+18370 7E27 E0101; Hanyo-Denshi; JB5239 @@ -20966,6 +21133,8 @@ 7E9E E0100; Adobe-Japan1; CID+22230 7EA2 E0100; Hanyo-Denshi; TK01071150 7EA2 E0101; Hanyo-Denshi; TK01071200 +7EFB E0100; CAAPH; M8130 +7EFB E0101; CAAPH; I8004 7F36 E0100; Adobe-Japan1; CID+1544 7F38 E0100; Adobe-Japan1; CID+6156 7F3A E0100; Adobe-Japan1; CID+6157 @@ -21000,6 +21169,8 @@ 7F4D E0100; Adobe-Japan1; CID+6160 7F4D E0101; Hanyo-Denshi; JA7003 7F4D E0102; Hanyo-Denshi; TK01061000 +7F4D E0103; CAAPH; M8116 +7F4D E0104; CAAPH; J8123 7F4E E0100; Adobe-Japan1; CID+6161 7F4F E0100; Adobe-Japan1; CID+14998 7F50 E0100; Adobe-Japan1; CID+6162 @@ -21041,6 +21212,8 @@ 7F66 E0100; Adobe-Japan1; CID+22233 7F67 E0100; Adobe-Japan1; CID+6171 7F68 E0100; Adobe-Japan1; CID+6169 +7F68 E0101; CAAPH; M8145 +7F68 E0102; CAAPH; K8009 7F69 E0100; Adobe-Japan1; CID+6170 7F6A E0100; Adobe-Japan1; CID+2129 7F6A E0101; Adobe-Japan1; CID+13449 @@ -21259,6 +21432,8 @@ 7FE0 E0103; Moji_Joho; MJ020698 7FE0 E0104; Hanyo-Denshi; FT1833 7FE0 E0104; Moji_Joho; MJ020696 +7FE0 E0105; CAAPH; M8012 +7FE0 E0106; CAAPH; J8011 7FE1 E0100; Adobe-Japan1; CID+6196 7FE1 E0101; Adobe-Japan1; CID+13579 7FE1 E0102; Adobe-Japan1; CID+20192 @@ -21528,6 +21703,8 @@ 8072 E0100; Adobe-Japan1; CID+6222 8072 E0101; Moji_Joho; MJ020876 8072 E0102; Moji_Joho; MJ020877 +8072 E0103; CAAPH; M8047 +8072 E0104; CAAPH; J8048 8073 E0100; Adobe-Japan1; CID+6221 8073 E0101; Adobe-Japan1; CID+13582 8073 E0102; Moji_Joho; MJ020878 @@ -21787,6 +21964,8 @@ 812B E0100; Adobe-Japan1; CID+13913 812B E0101; Moji_Joho; MJ021075 812B E0102; Moji_Joho; MJ058383 +812B E0103; CAAPH; M8023 +812B E0104; CAAPH; J8022 812C E0100; Adobe-Japan1; CID+18429 812F E0100; Adobe-Japan1; CID+6250 8130 E0100; Adobe-Japan1; CID+19707 @@ -24524,6 +24703,8 @@ 84BF E0102; Hanyo-Denshi; KS357130 84BF E0102; Moji_Joho; MJ022523 84BF E0103; Hanyo-Denshi; TK01080350 +84BF E0104; CAAPH; M8037 +84BF E0105; CAAPH; J8037 84C0 E0100; Adobe-Japan1; CID+15066 84C0 E0101; Hanyo-Denshi; JB5688 84C0 E0101; Moji_Joho; MJ022525 @@ -27410,6 +27591,9 @@ 8A18 E0101; Moji_Joho; MJ024357 8A18 E0102; Hanyo-Denshi; JTBB4D 8A18 E0102; Moji_Joho; MJ024358 +8A18 E0103; CAAPH; M8031 +8A18 E0104; CAAPH; J8031 +8A18 E0105; CAAPH; J8139 8A1B E0100; Adobe-Japan1; CID+6661 8A1B E0101; Moji_Joho; MJ024360 8A1B E0102; Moji_Joho; MJ024361 @@ -27635,6 +27819,8 @@ 8AAA E0101; Moji_Joho; MJ024533 8AAA E0102; Hanyo-Denshi; KS402930 8AAA E0102; Moji_Joho; MJ058743 +8AAA E0103; CAAPH; M8021 +8AAA E0104; CAAPH; J8020 8AAC E0100; Adobe-Japan1; CID+2694 8AAD E0100; Adobe-Japan1; CID+3233 8AAE E0100; Adobe-Japan1; CID+18679 @@ -28151,6 +28337,8 @@ 8B9D E0100; Adobe-Japan1; CID+17131 8B9E E0100; Adobe-Japan1; CID+15149 8B9F E0100; Adobe-Japan1; CID+19823 +8BAF E0100; CAAPH; M8142 +8BAF E0101; CAAPH; K8006 8C37 E0100; Adobe-Japan1; CID+2921 8C38 E0100; Adobe-Japan1; CID+22566 8C39 E0100; Adobe-Japan1; CID+18698 @@ -30505,6 +30693,8 @@ 90E8 E0100; Adobe-Japan1; CID+3558 90EB E0100; Adobe-Japan1; CID+18791 90ED E0100; Adobe-Japan1; CID+1458 +90ED E0101; CAAPH; M8004 +90ED E0102; CAAPH; J8004 90EF E0100; Adobe-Japan1; CID+17157 90F0 E0100; Adobe-Japan1; CID+19900 90F1 E0100; Hanyo-Denshi; IP90F1 @@ -36077,6 +36267,8 @@ FA29 E0100; Adobe-Japan1; CID+8687 20EDB E0101; Hanyo-Denshi; IB0633 20EDB E0101; Moji_Joho; MJ032503 20F5F E0100; Adobe-Japan1; CID+17391 +20F96 E0100; CAAPH; J0145 +20F96 E0101; CAAPH; J8089 20FCB E0100; Hanyo-Denshi; KS049840 20FCB E0100; Moji_Joho; MJ032603 20FCB E0101; Hanyo-Denshi; KS050000 @@ -38233,6 +38425,8 @@ FA29 E0100; Adobe-Japan1; CID+8687 28763 E0101; Moji_Joho; MJ058877 2880B E0100; Moji_Joho; MJ051498 2880B E0101; Moji_Joho; MJ051499 +28941 E0100; CAAPH; M8088 +28941 E0101; CAAPH; J8096 28945 E0100; Hanyo-Denshi; JTBDCAS 28945 E0100; Moji_Joho; MJ051702 28945 E0101; Hanyo-Denshi; JTBDCD @@ -38927,6 +39121,8 @@ FA29 E0100; Adobe-Japan1; CID+8687 2B4C6 E0101; Hanyo-Denshi; TK01094240 2B52D E0100; Hanyo-Denshi; TK01008020 2B52D E0101; Hanyo-Denshi; TK01008030 +2B598 E0100; CAAPH; J0078 +2B598 E0101; CAAPH; J8002 2B667 E0100; Hanyo-Denshi; KS523680 2B667 E0101; Hanyo-Denshi; TK01100300 2B741 E0100; Hanyo-Denshi; IB1305 @@ -39340,5 +39536,10 @@ FA29 E0100; Adobe-Japan1; CID+8687 2EB71 E0101; Moji_Joho; MJ059252 2EB79 E0100; Moji_Joho; MJ059255 2EB79 E0101; Moji_Joho; MJ059256 +2EDA5 E0100; CAAPH; M8090 +2EDA5 E0101; CAAPH; J8098 +30654 E0100; CAAPH; J0002 +30654 E0101; CAAPH; J8072 +30654 E0102; CAAPH; J8074 31350 E0100; Adobe-Japan1; CID+19130 # EOF diff --git a/admin/unidata/IdnaMappingTable.txt b/admin/unidata/IdnaMappingTable.txt index d62ac3ebeae..b4a2d22be10 100644 --- a/admin/unidata/IdnaMappingTable.txt +++ b/admin/unidata/IdnaMappingTable.txt @@ -1,11 +1,11 @@ # IdnaMappingTable.txt -# Date: 2024-07-03, 21:52:28 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-07-25, 18:08:44 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Unicode IDNA Compatible Preprocessing for UTS #46 -# Version: 16.0.0 +# Version: 17.0.0 # # For documentation and usage, see https://www.unicode.org/reports/tr46 # @@ -975,7 +975,7 @@ 0870..0887 ; valid # 14.0 ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT 0888 ; valid ; ; NV8 # 14.0 ARABIC RAISED ROUND DOT 0889..088E ; valid # 14.0 ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL -088F ; disallowed # NA +088F ; valid # 17.0 ARABIC LETTER NOON WITH RING ABOVE 0890..0891 ; disallowed # 14.0 ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 0892..0896 ; disallowed # NA .. 0897 ; valid # 16.0 ARABIC PEPET @@ -1237,7 +1237,8 @@ 0C57 ; disallowed # NA 0C58..0C59 ; valid # 5.1 TELUGU LETTER TSA..TELUGU LETTER DZA 0C5A ; valid # 8.0 TELUGU LETTER RRRA -0C5B..0C5C ; disallowed # NA .. +0C5B ; disallowed # NA +0C5C ; valid # 17.0 TELUGU ARCHAIC SHRII 0C5D ; valid # 14.0 TELUGU LETTER NAKAARA POLLU 0C5E..0C5F ; disallowed # NA .. 0C60..0C61 ; valid # 1.1 TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL @@ -1269,7 +1270,8 @@ 0CCA..0CCD ; valid # 1.1 KANNADA VOWEL SIGN O..KANNADA SIGN VIRAMA 0CCE..0CD4 ; disallowed # NA .. 0CD5..0CD6 ; valid # 1.1 KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CD7..0CDC ; disallowed # NA .. +0CD7..0CDB ; disallowed # NA .. +0CDC ; valid # 17.0 KANNADA ARCHAIC SHRII 0CDD ; valid # 14.0 KANNADA LETTER NAKAARA POLLU 0CDE ; valid # 1.1 KANNADA LETTER FA 0CDF ; disallowed # NA @@ -1713,7 +1715,10 @@ 1ABE ; valid ; ; NV8 # 7.0 COMBINING PARENTHESES OVERLAY 1ABF..1AC0 ; valid # 13.0 COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW 1AC1..1ACE ; valid # 14.0 COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING LATIN SMALL LETTER INSULAR T -1ACF..1AFF ; disallowed # NA .. +1ACF..1ADD ; valid # 17.0 COMBINING DOUBLE CARON..COMBINING DOT-AND-RING BELOW +1ADE..1ADF ; disallowed # NA .. +1AE0..1AEB ; valid # 17.0 COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE +1AEC..1AFF ; disallowed # NA .. 1B00..1B4B ; valid # 5.0 BALINESE SIGN ULU RICEM..BALINESE LETTER ASYURA SASAK 1B4C ; valid # 14.0 BALINESE LETTER ARCHAIC JNYA 1B4D ; disallowed # NA @@ -2466,7 +2471,8 @@ 20BE ; valid ; ; NV8 # 8.0 LARI SIGN 20BF ; valid ; ; NV8 # 10.0 BITCOIN SIGN 20C0 ; valid ; ; NV8 # 14.0 SOM SIGN -20C1..20CF ; disallowed # NA .. +20C1 ; valid ; ; NV8 # 17.0 SAUDI RIYAL SIGN +20C2..20CF ; disallowed # NA .. 20D0..20E1 ; valid ; ; NV8 # 1.1 COMBINING LEFT HARPOON ABOVE..COMBINING LEFT RIGHT ARROW ABOVE 20E2..20E3 ; valid ; ; NV8 # 3.0 COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING KEYCAP 20E4..20EA ; valid ; ; NV8 # 3.2 COMBINING ENCLOSING UPWARD POINTING TRIANGLE..COMBINING LEFTWARDS ARROW OVERLAY @@ -2838,7 +2844,7 @@ 2B5A..2B73 ; valid ; ; NV8 # 7.0 SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B74..2B75 ; disallowed # NA .. 2B76..2B95 ; valid ; ; NV8 # 7.0 NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B96 ; disallowed # NA +2B96 ; valid ; ; NV8 # 17.0 EQUALS SIGN WITH INFINITY ABOVE 2B97 ; valid ; ; NV8 # 13.0 SYMBOL FOR TYPE A ELECTRONICS 2B98..2BB9 ; valid ; ; NV8 # 7.0 THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX 2BBA..2BBC ; valid ; ; NV8 # 11.0 OVERLAPPING WHITE SQUARES..OVERLAPPING BLACK SQUARES @@ -4251,12 +4257,13 @@ A7CA ; valid # 13.0 LATIN SMALL LETTER S WITH SHOR A7CB ; mapped ; 0264 # 16.0 LATIN CAPITAL LETTER RAMS HORN A7CC ; mapped ; A7CD # 16.0 LATIN CAPITAL LETTER S WITH DIAGONAL STROKE A7CD ; valid # 16.0 LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7CE..A7CF ; disallowed # NA .. +A7CE ; mapped ; A7CF # 17.0 LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE +A7CF ; valid # 17.0 LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; mapped ; A7D1 # 14.0 LATIN CAPITAL LETTER CLOSED INSULAR G A7D1 ; valid # 14.0 LATIN SMALL LETTER CLOSED INSULAR G -A7D2 ; disallowed # NA +A7D2 ; mapped ; A7D3 # 17.0 LATIN CAPITAL LETTER DOUBLE THORN A7D3 ; valid # 14.0 LATIN SMALL LETTER DOUBLE THORN -A7D4 ; disallowed # NA +A7D4 ; mapped ; A7D5 # 17.0 LATIN CAPITAL LETTER DOUBLE WYNN A7D5 ; valid # 14.0 LATIN SMALL LETTER DOUBLE WYNN A7D6 ; mapped ; A7D7 # 14.0 LATIN CAPITAL LETTER MIDDLE SCOTS S A7D7 ; valid # 14.0 LATIN SMALL LETTER MIDDLE SCOTS S @@ -4265,7 +4272,8 @@ A7D9 ; valid # 14.0 LATIN SMALL LETTER SIGMOID S A7DA ; mapped ; A7DB # 16.0 LATIN CAPITAL LETTER LAMBDA A7DB ; valid # 16.0 LATIN SMALL LETTER LAMBDA A7DC ; mapped ; 019B # 16.0 LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7DD..A7F1 ; disallowed # NA .. +A7DD..A7F0 ; disallowed # NA .. +A7F1 ; mapped ; 0073 # 17.0 MODIFIER LETTER CAPITAL S A7F2 ; mapped ; 0063 # 14.0 MODIFIER LETTER CAPITAL C A7F3 ; mapped ; 0066 # 14.0 MODIFIER LETTER CAPITAL F A7F4 ; mapped ; 0071 # 14.0 MODIFIER LETTER CAPITAL Q @@ -5011,7 +5019,7 @@ FBAE..FBAF ; mapped ; 06D2 # 1.1 ARABIC LETTER YEH BARREE ISOLA FBB0..FBB1 ; mapped ; 06D3 # 1.1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FBB2..FBC1 ; valid ; ; NV8 # 6.0 ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW FBC2 ; valid ; ; NV8 # 14.0 ARABIC SYMBOL WASLA ABOVE -FBC3..FBD2 ; disallowed # NA .. +FBC3..FBD2 ; valid ; ; NV8 # 17.0 ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH FBD3..FBD6 ; mapped ; 06AD # 1.1 ARABIC LETTER NG ISOLATED FORM..ARABIC LETTER NG MEDIAL FORM FBD7..FBD8 ; mapped ; 06C7 # 1.1 ARABIC LETTER U ISOLATED FORM..ARABIC LETTER U FINAL FORM FBD9..FBDA ; mapped ; 06C6 # 1.1 ARABIC LETTER OE ISOLATED FORM..ARABIC LETTER OE FINAL FORM @@ -5399,7 +5407,7 @@ FD8C ; mapped ; 0645 062C 062D #1.1 ARABIC LIGATURE MEEM WITH JEEM FD8D ; mapped ; 0645 062C 0645 #1.1 ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM FD8E ; mapped ; 0645 062E 062C #1.1 ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM FD8F ; mapped ; 0645 062E 0645 #1.1 ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM -FD90..FD91 ; disallowed # NA .. +FD90..FD91 ; valid ; ; NV8 # 17.0 ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA FD92 ; mapped ; 0645 062C 062E #1.1 ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM FD93 ; mapped ; 0647 0645 062C #1.1 ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM FD94 ; mapped ; 0647 0645 0645 #1.1 ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM @@ -5452,7 +5460,7 @@ FDC4 ; mapped ; 0639 062C 0645 #1.1 ARABIC LIGATURE AIN WITH JEEM FDC5 ; mapped ; 0635 0645 0645 #1.1 ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM FDC6 ; mapped ; 0633 062E 064A #1.1 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM FDC7 ; mapped ; 0646 062C 064A #1.1 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FDC8..FDCE ; disallowed # NA .. +FDC8..FDCE ; valid ; ; NV8 # 17.0 ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE KARRAMA ALLAAHU WAJHAH FDCF ; valid ; ; NV8 # 14.0 ARABIC LIGATURE SALAAMUHU ALAYNAA FDD0..FDEF ; disallowed # 3.1 .. FDF0 ; mapped ; 0635 0644 06D2 #1.1 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM @@ -6130,7 +6138,8 @@ FFFE..FFFF ; disallowed # 1.1 .... 1093F ; valid ; ; NV8 # 5.1 LYDIAN TRIANGULAR MARK -10940..1097F ; disallowed # NA .. +10940..10959 ; valid # 17.0 SIDETIC LETTER N01..SIDETIC LETTER N26 +1095A..1097F ; disallowed # NA .. 10980..109B7 ; valid # 6.1 MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109B8..109BB ; disallowed # NA .. 109BC..109BD ; valid ; ; NV8 # 8.0 MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF @@ -6284,7 +6293,11 @@ FFFE..FFFF ; disallowed # 1.1 .... 10EC2..10EC4 ; valid # 16.0 ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EC5..10EFB ; disallowed # NA .. +10EC5..10EC7 ; valid # 17.0 ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EC8..10ECF ; disallowed # NA .. +10ED0..10ED8 ; valid ; ; NV8 # 17.0 ARABIC BIBLICAL END OF VERSE..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH +10ED9..10EF9 ; disallowed # NA .. +10EFA..10EFB ; valid # 17.0 ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW NOON 10EFC ; valid # 16.0 ARABIC COMBINING ALEF OVERLAY 10EFD..10EFF ; valid # 15.0 ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; valid # 11.0 OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL @@ -6551,7 +6564,9 @@ FFFE..FFFF ; disallowed # 1.1 .... 11B00..11B09 ; valid ; ; NV8 # 15.0 DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU -11B0A..11BBF ; disallowed # NA .. +11B0A..11B5F ; disallowed # NA .. +11B60..11B67 ; valid # 17.0 SHARADA VOWEL SIGN OE..SHARADA VOWEL SIGN CANDRA O +11B68..11BBF ; disallowed # NA .. 11BC0..11BE0 ; valid # 16.0 SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11BE1 ; valid ; ; NV8 # 16.0 SUNUWAR SIGN PVO 11BE2..11BEF ; disallowed # NA .. @@ -6599,7 +6614,11 @@ FFFE..FFFF ; disallowed # 1.1 .... 11DA0..11DA9 ; valid # 11.0 GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE -11DAA..11EDF ; disallowed # NA .. +11DAA..11DAF ; disallowed # NA .. +11DB0..11DDB ; valid # 17.0 TOLONG SIKI LETTER I..TOLONG SIKI UNGGA +11DDC..11DDF ; disallowed # NA .. +11DE0..11DE9 ; valid # 17.0 TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE +11DEA..11EDF ; disallowed # NA .. 11EE0..11EF6 ; valid # 11.0 MAKASAR LETTER KA..MAKASAR VOWEL SIGN O 11EF7..11EF8 ; valid ; ; NV8 # 11.0 MAKASAR PASSIMBANG..MAKASAR END OF SECTION 11EF9..11EFF ; disallowed # NA .. @@ -6711,7 +6730,35 @@ FFFE..FFFF ; disallowed # 1.1 .... +16E9B..16E9F ; disallowed # NA .. +16EA0 ; mapped ; 16EBB # 17.0 BERIA ERFE CAPITAL LETTER ARKAB +16EA1 ; mapped ; 16EBC # 17.0 BERIA ERFE CAPITAL LETTER BASIGNA +16EA2 ; mapped ; 16EBD # 17.0 BERIA ERFE CAPITAL LETTER DARBAI +16EA3 ; mapped ; 16EBE # 17.0 BERIA ERFE CAPITAL LETTER EH +16EA4 ; mapped ; 16EBF # 17.0 BERIA ERFE CAPITAL LETTER FITKO +16EA5 ; mapped ; 16EC0 # 17.0 BERIA ERFE CAPITAL LETTER GOWAY +16EA6 ; mapped ; 16EC1 # 17.0 BERIA ERFE CAPITAL LETTER HIRDEABO +16EA7 ; mapped ; 16EC2 # 17.0 BERIA ERFE CAPITAL LETTER I +16EA8 ; mapped ; 16EC3 # 17.0 BERIA ERFE CAPITAL LETTER DJAI +16EA9 ; mapped ; 16EC4 # 17.0 BERIA ERFE CAPITAL LETTER KOBO +16EAA ; mapped ; 16EC5 # 17.0 BERIA ERFE CAPITAL LETTER LAKKO +16EAB ; mapped ; 16EC6 # 17.0 BERIA ERFE CAPITAL LETTER MERI +16EAC ; mapped ; 16EC7 # 17.0 BERIA ERFE CAPITAL LETTER NINI +16EAD ; mapped ; 16EC8 # 17.0 BERIA ERFE CAPITAL LETTER GNA +16EAE ; mapped ; 16EC9 # 17.0 BERIA ERFE CAPITAL LETTER NGAY +16EAF ; mapped ; 16ECA # 17.0 BERIA ERFE CAPITAL LETTER OI +16EB0 ; mapped ; 16ECB # 17.0 BERIA ERFE CAPITAL LETTER PI +16EB1 ; mapped ; 16ECC # 17.0 BERIA ERFE CAPITAL LETTER ERIGO +16EB2 ; mapped ; 16ECD # 17.0 BERIA ERFE CAPITAL LETTER ERIGO TAMURA +16EB3 ; mapped ; 16ECE # 17.0 BERIA ERFE CAPITAL LETTER SERI +16EB4 ; mapped ; 16ECF # 17.0 BERIA ERFE CAPITAL LETTER SHEP +16EB5 ; mapped ; 16ED0 # 17.0 BERIA ERFE CAPITAL LETTER TATASOUE +16EB6 ; mapped ; 16ED1 # 17.0 BERIA ERFE CAPITAL LETTER UI +16EB7 ; mapped ; 16ED2 # 17.0 BERIA ERFE CAPITAL LETTER WASSE +16EB8 ; mapped ; 16ED3 # 17.0 BERIA ERFE CAPITAL LETTER AY +16EB9..16EBA ; disallowed # NA .. +16EBB..16ED3 ; valid # 17.0 BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +16ED4..16EFF ; disallowed # NA .. 16F00..16F44 ; valid # 6.1 MIAO LETTER PA..MIAO LETTER HHA 16F45..16F4A ; valid # 12.0 MIAO LETTER BRI..MIAO LETTER RTE 16F4B..16F4E ; disallowed # NA .. @@ -6728,17 +6775,22 @@ FFFE..FFFF ; disallowed # 1.1 .... 16FF0..16FF1 ; valid # 13.0 VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -16FF2..16FFF ; disallowed # NA .. +16FF2..16FF3 ; valid # 17.0 CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; valid ; ; NV8 # 17.0 YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +16FF7..16FFF ; disallowed # NA .. 17000..187EC ; valid # 9.0 TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC 187ED..187F1 ; valid # 11.0 TANGUT IDEOGRAPH-187ED..TANGUT IDEOGRAPH-187F1 187F2..187F7 ; valid # 12.0 TANGUT IDEOGRAPH-187F2..TANGUT IDEOGRAPH-187F7 -187F8..187FF ; disallowed # NA .. +187F8..187FF ; valid # 17.0 TANGUT IDEOGRAPH-187F8..TANGUT IDEOGRAPH-187FF 18800..18AF2 ; valid # 9.0 TANGUT COMPONENT-001..TANGUT COMPONENT-755 18AF3..18CD5 ; valid # 13.0 TANGUT COMPONENT-756..KHITAN SMALL SCRIPT CHARACTER-18CD5 18CD6..18CFE ; disallowed # NA .. 18CFF ; valid # 16.0 KHITAN SMALL SCRIPT CHARACTER-18CFF 18D00..18D08 ; valid # 13.0 TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -18D09..1AFEF ; disallowed # NA .. +18D09..18D1E ; valid # 17.0 TANGUT IDEOGRAPH-18D09..TANGUT IDEOGRAPH-18D1E +18D1F..18D7F ; disallowed # NA .. +18D80..18DF2 ; valid # 17.0 TANGUT COMPONENT-769..TANGUT COMPONENT-883 +18DF3..1AFEF ; disallowed # NA .. 1AFF0..1AFF3 ; valid # 14.0 KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF4 ; disallowed # NA 1AFF5..1AFFB ; valid # 14.0 KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 @@ -6809,9 +6861,14 @@ FFFE..FFFF ; disallowed # 1.1 .... +1CCFA..1CCFC ; valid ; ; NV8 # 17.0 SNAKE SYMBOL..NOSE SYMBOL +1CCFD..1CCFF ; disallowed # NA .. 1CD00..1CEB3 ; valid ; ; NV8 # 16.0 BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET -1CEB4..1CEFF ; disallowed # NA .. +1CEB4..1CEB9 ; disallowed # NA .. +1CEBA..1CED0 ; valid ; ; NV8 # 17.0 FRAGILE SYMBOL..LEUKOTHEA +1CED1..1CEDF ; disallowed # NA .. +1CEE0..1CEF0 ; valid ; ; NV8 # 17.0 GEOMANTIC FIGURE POPULUS..MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR +1CEF1..1CEFF ; disallowed # NA .. 1CF00..1CF2D ; valid # 14.0 ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT 1CF2E..1CF2F ; disallowed # NA .. 1CF30..1CF46 ; valid # 14.0 ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG @@ -7978,7 +8035,13 @@ FFFE..FFFF ; disallowed # 1.1 .... 1E5FF ; valid ; ; NV8 # 16.0 OL ONAL ABBREVIATION SIGN -1E600..1E7DF ; disallowed # NA .. +1E600..1E6BF ; disallowed # NA .. +1E6C0..1E6DE ; valid # 17.0 TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6DF ; disallowed # NA +1E6E0..1E6F5 ; valid # 17.0 TAI YO LETTER AA..TAI YO SIGN OM +1E6F6..1E6FD ; disallowed # NA .. +1E6FE..1E6FF ; valid # 17.0 TAI YO SYMBOL MUEANG..TAI YO XAM LAI +1E700..1E7DF ; disallowed # NA .. 1E7E0..1E7E6 ; valid # 14.0 ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E7 ; disallowed # NA 1E7E8..1E7EB ; valid # 14.0 ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE @@ -8465,7 +8528,8 @@ FFFE..FFFF ; disallowed # 1.1 .... +1F6D8 ; valid ; ; NV8 # 17.0 LANDSLIDE +1F6D9..1F6DB ; disallowed # NA .. 1F6DC ; valid ; ; NV8 # 15.0 WIRELESS 1F6DD..1F6DF ; valid ; ; NV8 # 14.0 PLAYGROUND SLIDE..RING BUOY 1F6E0..1F6EC ; valid ; ; NV8 # 7.0 HAMMER AND WRENCH..AIRPLANE ARRIVING @@ -8479,7 +8543,7 @@ FFFE..FFFF ; disallowed # 1.1 .... 1F700..1F773 ; valid ; ; NV8 # 6.0 ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE 1F774..1F776 ; valid ; ; NV8 # 15.0 LOT OF FORTUNE..LUNAR ECLIPSE -1F777..1F77A ; disallowed # NA .. +1F777..1F77A ; valid ; ; NV8 # 17.0 VESTA FORM TWO..PARTHENOPE FORM TWO 1F77B..1F77F ; valid ; ; NV8 # 15.0 HAUMEA..ORCUS 1F780..1F7D4 ; valid ; ; NV8 # 7.0 BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR 1F7D5..1F7D8 ; valid ; ; NV8 # 11.0 CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE @@ -8503,7 +8567,9 @@ FFFE..FFFF ; disallowed # 1.1 .... 1F8C0..1F8C1 ; valid ; ; NV8 # 16.0 LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW -1F8C2..1F8FF ; disallowed # NA .. +1F8C2..1F8CF ; disallowed # NA .. +1F8D0..1F8D8 ; valid ; ; NV8 # 17.0 LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE +1F8D9..1F8FF ; disallowed # NA .. 1F900..1F90B ; valid ; ; NV8 # 10.0 CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT 1F90C ; valid ; ; NV8 # 13.0 PINCHED FINGERS 1F90D..1F90F ; valid ; ; NV8 # 12.0 WHITE HEART..PINCHING HAND @@ -8549,7 +8615,8 @@ FFFE..FFFF ; disallowed # 1.1 .... +1FA54..1FA57 ; valid ; ; NV8 # 17.0 WHITE CHESS FERZ..BLACK CHESS ALFIL +1FA58..1FA5F ; disallowed # NA .. 1FA60..1FA6D ; valid ; ; NV8 # 11.0 XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA6E..1FA6F ; disallowed # NA .. 1FA70..1FA73 ; valid ; ; NV8 # 12.0 BALLET SHOES..SHORTS @@ -8562,7 +8629,9 @@ FFFE..FFFF ; disallowed # 1.1 .... +1FA8A ; valid ; ; NV8 # 17.0 TROMBONE +1FA8B..1FA8D ; disallowed # NA .. +1FA8E ; valid ; ; NV8 # 17.0 TREASURE CHEST 1FA8F ; valid ; ; NV8 # 16.0 SHOVEL 1FA90..1FA95 ; valid ; ; NV8 # 12.0 RINGED PLANET..BANJO 1FA96..1FAA8 ; valid ; ; NV8 # 13.0 MILITARY HELMET..ROCK @@ -8576,7 +8645,10 @@ FFFE..FFFF ; disallowed # 1.1 .... +1FAC7 ; disallowed # NA +1FAC8 ; valid ; ; NV8 # 17.0 HAIRY CREATURE +1FAC9..1FACC ; disallowed # NA .. +1FACD ; valid ; ; NV8 # 17.0 ORCA 1FACE..1FACF ; valid ; ; NV8 # 15.0 MOOSE..DONKEY 1FAD0..1FAD6 ; valid ; ; NV8 # 13.0 BLUEBERRIES..TEAPOT 1FAD7..1FAD9 ; valid ; ; NV8 # 14.0 POURING LIQUID..JAR @@ -8587,7 +8659,9 @@ FFFE..FFFF ; disallowed # 1.1 .... +1FAEA ; valid ; ; NV8 # 17.0 DISTORTED FACE +1FAEB..1FAEE ; disallowed # NA .. +1FAEF ; valid ; ; NV8 # 17.0 FIGHT CLOUD 1FAF0..1FAF6 ; valid ; ; NV8 # 14.0 HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS 1FAF7..1FAF8 ; valid ; ; NV8 # 15.0 LEFTWARDS PUSHING HAND..RIGHTWARDS PUSHING HAND 1FAF9..1FAFF ; disallowed # NA .. @@ -8605,7 +8679,8 @@ FFFE..FFFF ; disallowed # 1.1 .... +1FBFA ; valid ; ; NV8 # 17.0 ALARM BELL SYMBOL +1FBFB..1FFFD ; disallowed # NA .. 1FFFE..1FFFF ; disallowed # 2.0 .. 20000..2A6D6 ; valid # 3.1 CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 2A6D7..2A6DD ; valid # 13.0 CJK UNIFIED IDEOGRAPH-2A6D7..CJK UNIFIED IDEOGRAPH-2A6DD @@ -8614,11 +8689,12 @@ FFFE..FFFF ; disallowed # 1.1 .... +2B73A..2B73F ; valid # 17.0 CJK UNIFIED IDEOGRAPH-2B73A..CJK UNIFIED IDEOGRAPH-2B73F 2B740..2B81D ; valid # 6.0 CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B81E..2B81F ; disallowed # NA .. 2B820..2CEA1 ; valid # 8.0 CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 -2CEA2..2CEAF ; disallowed # NA .. +2CEA2..2CEAD ; valid # 17.0 CJK UNIFIED IDEOGRAPH-2CEA2..CJK UNIFIED IDEOGRAPH-2CEAD +2CEAE..2CEAF ; disallowed # NA .. 2CEB0..2EBE0 ; valid # 10.0 CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBE1..2EBEF ; disallowed # NA .. 2EBF0..2EE5D ; valid # 15.1 CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D @@ -9160,7 +9236,8 @@ FFFE..FFFF ; disallowed # 1.1 .... 31350..323AF ; valid # 15.0 CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -323B0..3FFFD ; disallowed # NA .. +323B0..33479 ; valid # 17.0 CJK UNIFIED IDEOGRAPH-323B0..CJK UNIFIED IDEOGRAPH-33479 +3347A..3FFFD ; disallowed # NA .. 3FFFE..3FFFF ; disallowed # 2.0 .. 40000..4FFFD ; disallowed # NA .. 4FFFE..4FFFF ; disallowed # 2.0 .. diff --git a/admin/unidata/NormalizationTest.txt b/admin/unidata/NormalizationTest.txt index 3aae8f72e87..97b4e4e6202 100644 --- a/admin/unidata/NormalizationTest.txt +++ b/admin/unidata/NormalizationTest.txt @@ -1,6 +1,6 @@ -# NormalizationTest-16.0.0.txt -# Date: 2024-04-30, 21:48:23 GMT -# © 2024 Unicode®, Inc. +# NormalizationTest-17.0.0.txt +# Date: 2025-06-30, 06:16:16 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -2429,6 +2429,7 @@ FEFA 0334;FEFA 0334;FEFA 0334;0644 0625 0334;0644 0627 0334 0655; # (ﻺ◌̴; A69C;A69C;A69C;044A;044A; # (ꚜ; ꚜ; ꚜ; ъ; ъ; ) MODIFIER LETTER CYRILLIC HARD SIGN A69D;A69D;A69D;044C;044C; # (ꚝ; ꚝ; ꚝ; ь; ь; ) MODIFIER LETTER CYRILLIC SOFT SIGN A770;A770;A770;A76F;A76F; # (ꝰ; ꝰ; ꝰ; ꝯ; ꝯ; ) MODIFIER LETTER US +A7F1;A7F1;A7F1;0053;0053; # (꟱; ꟱; ꟱; S; S; ) MODIFIER LETTER CAPITAL S A7F2;A7F2;A7F2;0043;0043; # (ꟲ; ꟲ; ꟲ; C; C; ) MODIFIER LETTER CAPITAL C A7F3;A7F3;A7F3;0046;0046; # (ꟳ; ꟳ; ꟳ; F; F; ) MODIFIER LETTER CAPITAL F A7F4;A7F4;A7F4;0051;0051; # (ꟴ; ꟴ; ꟴ; Q; Q; ) MODIFIER LETTER CAPITAL Q @@ -18098,6 +18099,60 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE 0061 1ACD 0315 0300 05AE 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 0300 0315 0062; # (a◌ᫍ◌̕◌̀◌֮b; a◌֮◌ᫍ◌̀◌̕b; a◌֮◌ᫍ◌̀◌̕b; a◌֮◌ᫍ◌̀◌̕b; a◌֮◌ᫍ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER INSULAR R, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1ACE 0062;00E0 05AE 1ACE 0315 0062;0061 05AE 0300 1ACE 0315 0062;00E0 05AE 1ACE 0315 0062;0061 05AE 0300 1ACE 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 LATIN SMALL LETTER INSULAR T, LATIN SMALL LETTER B 0061 1ACE 0315 0300 05AE 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 0300 0315 0062; # (a◌ᫎ◌̕◌̀◌֮b; a◌֮◌ᫎ◌̀◌̕b; a◌֮◌ᫎ◌̀◌̕b; a◌֮◌ᫎ◌̀◌̕b; a◌֮◌ᫎ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER INSULAR T, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1ACF 0062;00E0 05AE 1ACF 0315 0062;0061 05AE 0300 1ACF 0315 0062;00E0 05AE 1ACF 0315 0062;0061 05AE 0300 1ACF 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 DOUBLE CARON, LATIN SMALL LETTER B +0061 1ACF 0315 0300 05AE 0062;0061 05AE 1ACF 0300 0315 0062;0061 05AE 1ACF 0300 0315 0062;0061 05AE 1ACF 0300 0315 0062;0061 05AE 1ACF 0300 0315 0062; # (a◌᫏◌̕◌̀◌֮b; a◌֮◌᫏◌̀◌̕b; a◌֮◌᫏◌̀◌̕b; a◌֮◌᫏◌̀◌̕b; a◌֮◌᫏◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE CARON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD0 0062;00E0 05AE 1AD0 0315 0062;0061 05AE 0300 1AD0 0315 0062;00E0 05AE 1AD0 0315 0062;0061 05AE 0300 1AD0 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 VERTICAL-LINE-ACUTE, LATIN SMALL LETTER B +0061 1AD0 0315 0300 05AE 0062;0061 05AE 1AD0 0300 0315 0062;0061 05AE 1AD0 0300 0315 0062;0061 05AE 1AD0 0300 0315 0062;0061 05AE 1AD0 0300 0315 0062; # (a◌᫐◌̕◌̀◌֮b; a◌֮◌᫐◌̀◌̕b; a◌֮◌᫐◌̀◌̕b; a◌֮◌᫐◌̀◌̕b; a◌֮◌᫐◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL-LINE-ACUTE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD1 0062;00E0 05AE 1AD1 0315 0062;0061 05AE 0300 1AD1 0315 0062;00E0 05AE 1AD1 0315 0062;0061 05AE 0300 1AD1 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 GRAVE-VERTICAL-LINE, LATIN SMALL LETTER B +0061 1AD1 0315 0300 05AE 0062;0061 05AE 1AD1 0300 0315 0062;0061 05AE 1AD1 0300 0315 0062;0061 05AE 1AD1 0300 0315 0062;0061 05AE 1AD1 0300 0315 0062; # (a◌᫑◌̕◌̀◌֮b; a◌֮◌᫑◌̀◌̕b; a◌֮◌᫑◌̀◌̕b; a◌֮◌᫑◌̀◌̕b; a◌֮◌᫑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRAVE-VERTICAL-LINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD2 0062;00E0 05AE 1AD2 0315 0062;0061 05AE 0300 1AD2 0315 0062;00E0 05AE 1AD2 0315 0062;0061 05AE 0300 1AD2 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 VERTICAL-LINE-GRAVE, LATIN SMALL LETTER B +0061 1AD2 0315 0300 05AE 0062;0061 05AE 1AD2 0300 0315 0062;0061 05AE 1AD2 0300 0315 0062;0061 05AE 1AD2 0300 0315 0062;0061 05AE 1AD2 0300 0315 0062; # (a◌᫒◌̕◌̀◌֮b; a◌֮◌᫒◌̀◌̕b; a◌֮◌᫒◌̀◌̕b; a◌֮◌᫒◌̀◌̕b; a◌֮◌᫒◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL-LINE-GRAVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD3 0062;00E0 05AE 1AD3 0315 0062;0061 05AE 0300 1AD3 0315 0062;00E0 05AE 1AD3 0315 0062;0061 05AE 0300 1AD3 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 ACUTE-VERTICAL-LINE, LATIN SMALL LETTER B +0061 1AD3 0315 0300 05AE 0062;0061 05AE 1AD3 0300 0315 0062;0061 05AE 1AD3 0300 0315 0062;0061 05AE 1AD3 0300 0315 0062;0061 05AE 1AD3 0300 0315 0062; # (a◌᫓◌̕◌̀◌֮b; a◌֮◌᫓◌̀◌̕b; a◌֮◌᫓◌̀◌̕b; a◌֮◌᫓◌̀◌̕b; a◌֮◌᫓◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ACUTE-VERTICAL-LINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD4 0062;00E0 05AE 1AD4 0315 0062;0061 05AE 0300 1AD4 0315 0062;00E0 05AE 1AD4 0315 0062;0061 05AE 0300 1AD4 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 VERTICAL-LINE-MACRON, LATIN SMALL LETTER B +0061 1AD4 0315 0300 05AE 0062;0061 05AE 1AD4 0300 0315 0062;0061 05AE 1AD4 0300 0315 0062;0061 05AE 1AD4 0300 0315 0062;0061 05AE 1AD4 0300 0315 0062; # (a◌᫔◌̕◌̀◌֮b; a◌֮◌᫔◌̀◌̕b; a◌֮◌᫔◌̀◌̕b; a◌֮◌᫔◌̀◌̕b; a◌֮◌᫔◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL-LINE-MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD5 0062;00E0 05AE 1AD5 0315 0062;0061 05AE 0300 1AD5 0315 0062;00E0 05AE 1AD5 0315 0062;0061 05AE 0300 1AD5 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 MACRON-VERTICAL-LINE, LATIN SMALL LETTER B +0061 1AD5 0315 0300 05AE 0062;0061 05AE 1AD5 0300 0315 0062;0061 05AE 1AD5 0300 0315 0062;0061 05AE 1AD5 0300 0315 0062;0061 05AE 1AD5 0300 0315 0062; # (a◌᫕◌̕◌̀◌֮b; a◌֮◌᫕◌̀◌̕b; a◌֮◌᫕◌̀◌̕b; a◌֮◌᫕◌̀◌̕b; a◌֮◌᫕◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON-VERTICAL-LINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD6 0062;00E0 05AE 1AD6 0315 0062;0061 05AE 0300 1AD6 0315 0062;00E0 05AE 1AD6 0315 0062;0061 05AE 0300 1AD6 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 VERTICAL-LINE-ACUTE-GRAVE, LATIN SMALL LETTER B +0061 1AD6 0315 0300 05AE 0062;0061 05AE 1AD6 0300 0315 0062;0061 05AE 1AD6 0300 0315 0062;0061 05AE 1AD6 0300 0315 0062;0061 05AE 1AD6 0300 0315 0062; # (a◌᫖◌̕◌̀◌֮b; a◌֮◌᫖◌̀◌̕b; a◌֮◌᫖◌̀◌̕b; a◌֮◌᫖◌̀◌̕b; a◌֮◌᫖◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL-LINE-ACUTE-GRAVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD7 0062;00E0 05AE 1AD7 0315 0062;0061 05AE 0300 1AD7 0315 0062;00E0 05AE 1AD7 0315 0062;0061 05AE 0300 1AD7 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 VERTICAL-LINE-GRAVE-ACUTE, LATIN SMALL LETTER B +0061 1AD7 0315 0300 05AE 0062;0061 05AE 1AD7 0300 0315 0062;0061 05AE 1AD7 0300 0315 0062;0061 05AE 1AD7 0300 0315 0062;0061 05AE 1AD7 0300 0315 0062; # (a◌᫗◌̕◌̀◌֮b; a◌֮◌᫗◌̀◌̕b; a◌֮◌᫗◌̀◌̕b; a◌֮◌᫗◌̀◌̕b; a◌֮◌᫗◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL-LINE-GRAVE-ACUTE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD8 0062;00E0 05AE 1AD8 0315 0062;0061 05AE 0300 1AD8 0315 0062;00E0 05AE 1AD8 0315 0062;0061 05AE 0300 1AD8 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 MACRON-ACUTE-GRAVE, LATIN SMALL LETTER B +0061 1AD8 0315 0300 05AE 0062;0061 05AE 1AD8 0300 0315 0062;0061 05AE 1AD8 0300 0315 0062;0061 05AE 1AD8 0300 0315 0062;0061 05AE 1AD8 0300 0315 0062; # (a◌᫘◌̕◌̀◌֮b; a◌֮◌᫘◌̀◌̕b; a◌֮◌᫘◌̀◌̕b; a◌֮◌᫘◌̀◌̕b; a◌֮◌᫘◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON-ACUTE-GRAVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AD9 0062;00E0 05AE 1AD9 0315 0062;0061 05AE 0300 1AD9 0315 0062;00E0 05AE 1AD9 0315 0062;0061 05AE 0300 1AD9 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 SHARP SIGN, LATIN SMALL LETTER B +0061 1AD9 0315 0300 05AE 0062;0061 05AE 1AD9 0300 0315 0062;0061 05AE 1AD9 0300 0315 0062;0061 05AE 1AD9 0300 0315 0062;0061 05AE 1AD9 0300 0315 0062; # (a◌᫙◌̕◌̀◌֮b; a◌֮◌᫙◌̀◌̕b; a◌֮◌᫙◌̀◌̕b; a◌֮◌᫙◌̀◌̕b; a◌֮◌᫙◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING SHARP SIGN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1ADA 0062;00E0 05AE 1ADA 0315 0062;0061 05AE 0300 1ADA 0315 0062;00E0 05AE 1ADA 0315 0062;0061 05AE 0300 1ADA 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 FLAT SIGN, LATIN SMALL LETTER B +0061 1ADA 0315 0300 05AE 0062;0061 05AE 1ADA 0300 0315 0062;0061 05AE 1ADA 0300 0315 0062;0061 05AE 1ADA 0300 0315 0062;0061 05AE 1ADA 0300 0315 0062; # (a◌᫚◌̕◌̀◌֮b; a◌֮◌᫚◌̀◌̕b; a◌֮◌᫚◌̀◌̕b; a◌֮◌᫚◌̀◌̕b; a◌֮◌᫚◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING FLAT SIGN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1ADB 0062;00E0 05AE 1ADB 0315 0062;0061 05AE 0300 1ADB 0315 0062;00E0 05AE 1ADB 0315 0062;0061 05AE 0300 1ADB 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 DOWN TACK ABOVE, LATIN SMALL LETTER B +0061 1ADB 0315 0300 05AE 0062;0061 05AE 1ADB 0300 0315 0062;0061 05AE 1ADB 0300 0315 0062;0061 05AE 1ADB 0300 0315 0062;0061 05AE 1ADB 0300 0315 0062; # (a◌᫛◌̕◌̀◌֮b; a◌֮◌᫛◌̀◌̕b; a◌֮◌᫛◌̀◌̕b; a◌֮◌᫛◌̀◌̕b; a◌֮◌᫛◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOWN TACK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1ADC 0062;00E0 05AE 1ADC 0315 0062;0061 05AE 0300 1ADC 0315 0062;00E0 05AE 1ADC 0315 0062;0061 05AE 0300 1ADC 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 DIAERESIS WITH RAISED LEFT DOT, LATIN SMALL LETTER B +0061 1ADC 0315 0300 05AE 0062;0061 05AE 1ADC 0300 0315 0062;0061 05AE 1ADC 0300 0315 0062;0061 05AE 1ADC 0300 0315 0062;0061 05AE 1ADC 0300 0315 0062; # (a◌᫜◌̕◌̀◌֮b; a◌֮◌᫜◌̀◌̕b; a◌֮◌᫜◌̀◌̕b; a◌֮◌᫜◌̀◌̕b; a◌֮◌᫜◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DIAERESIS WITH RAISED LEFT DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 059A 0316 1DFA 1ADD 0062;0061 1DFA 0316 1ADD 059A 0062;0061 1DFA 0316 1ADD 059A 0062;0061 1DFA 0316 1ADD 059A 0062;0061 1DFA 0316 1ADD 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, COMBINING DOT-AND-RING BELOW, LATIN SMALL LETTER B +0061 1ADD 059A 0316 1DFA 0062;0061 1DFA 1ADD 0316 059A 0062;0061 1DFA 1ADD 0316 059A 0062;0061 1DFA 1ADD 0316 059A 0062;0061 1DFA 1ADD 0316 059A 0062; # (a◌᫝◌֚◌̖◌᷺b; a◌᷺◌᫝◌̖◌֚b; a◌᷺◌᫝◌̖◌֚b; a◌᷺◌᫝◌̖◌֚b; a◌᷺◌᫝◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOT-AND-RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE0 0062;00E0 05AE 1AE0 0315 0062;0061 05AE 0300 1AE0 0315 0062;00E0 05AE 1AE0 0315 0062;0061 05AE 0300 1AE0 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 LEFT TACK ABOVE, LATIN SMALL LETTER B +0061 1AE0 0315 0300 05AE 0062;0061 05AE 1AE0 0300 0315 0062;0061 05AE 1AE0 0300 0315 0062;0061 05AE 1AE0 0300 0315 0062;0061 05AE 1AE0 0300 0315 0062; # (a◌᫠◌̕◌̀◌֮b; a◌֮◌᫠◌̀◌̕b; a◌֮◌᫠◌̀◌̕b; a◌֮◌᫠◌̀◌̕b; a◌֮◌᫠◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT TACK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE1 0062;00E0 05AE 1AE1 0315 0062;0061 05AE 0300 1AE1 0315 0062;00E0 05AE 1AE1 0315 0062;0061 05AE 0300 1AE1 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 RIGHT TACK ABOVE, LATIN SMALL LETTER B +0061 1AE1 0315 0300 05AE 0062;0061 05AE 1AE1 0300 0315 0062;0061 05AE 1AE1 0300 0315 0062;0061 05AE 1AE1 0300 0315 0062;0061 05AE 1AE1 0300 0315 0062; # (a◌᫡◌̕◌̀◌֮b; a◌֮◌᫡◌̀◌̕b; a◌֮◌᫡◌̀◌̕b; a◌֮◌᫡◌̀◌̕b; a◌֮◌᫡◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RIGHT TACK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE2 0062;00E0 05AE 1AE2 0315 0062;0061 05AE 0300 1AE2 0315 0062;00E0 05AE 1AE2 0315 0062;0061 05AE 0300 1AE2 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 MINUS SIGN ABOVE, LATIN SMALL LETTER B +0061 1AE2 0315 0300 05AE 0062;0061 05AE 1AE2 0300 0315 0062;0061 05AE 1AE2 0300 0315 0062;0061 05AE 1AE2 0300 0315 0062;0061 05AE 1AE2 0300 0315 0062; # (a◌᫢◌̕◌̀◌֮b; a◌֮◌᫢◌̀◌̕b; a◌֮◌᫢◌̀◌̕b; a◌֮◌᫢◌̀◌̕b; a◌֮◌᫢◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MINUS SIGN ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE3 0062;00E0 05AE 1AE3 0315 0062;0061 05AE 0300 1AE3 0315 0062;00E0 05AE 1AE3 0315 0062;0061 05AE 0300 1AE3 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 INVERTED BRIDGE ABOVE, LATIN SMALL LETTER B +0061 1AE3 0315 0300 05AE 0062;0061 05AE 1AE3 0300 0315 0062;0061 05AE 1AE3 0300 0315 0062;0061 05AE 1AE3 0300 0315 0062;0061 05AE 1AE3 0300 0315 0062; # (a◌᫣◌̕◌̀◌֮b; a◌֮◌᫣◌̀◌̕b; a◌֮◌᫣◌̀◌̕b; a◌֮◌᫣◌̀◌̕b; a◌֮◌᫣◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING INVERTED BRIDGE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE4 0062;00E0 05AE 1AE4 0315 0062;0061 05AE 0300 1AE4 0315 0062;00E0 05AE 1AE4 0315 0062;0061 05AE 0300 1AE4 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 SQUARE ABOVE, LATIN SMALL LETTER B +0061 1AE4 0315 0300 05AE 0062;0061 05AE 1AE4 0300 0315 0062;0061 05AE 1AE4 0300 0315 0062;0061 05AE 1AE4 0300 0315 0062;0061 05AE 1AE4 0300 0315 0062; # (a◌᫤◌̕◌̀◌֮b; a◌֮◌᫤◌̀◌̕b; a◌֮◌᫤◌̀◌̕b; a◌֮◌᫤◌̀◌̕b; a◌֮◌᫤◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING SQUARE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE5 0062;00E0 05AE 1AE5 0315 0062;0061 05AE 0300 1AE5 0315 0062;00E0 05AE 1AE5 0315 0062;0061 05AE 0300 1AE5 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 SEAGULL ABOVE, LATIN SMALL LETTER B +0061 1AE5 0315 0300 05AE 0062;0061 05AE 1AE5 0300 0315 0062;0061 05AE 1AE5 0300 0315 0062;0061 05AE 1AE5 0300 0315 0062;0061 05AE 1AE5 0300 0315 0062; # (a◌᫥◌̕◌̀◌֮b; a◌֮◌᫥◌̀◌̕b; a◌֮◌᫥◌̀◌̕b; a◌֮◌᫥◌̀◌̕b; a◌֮◌᫥◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING SEAGULL ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 059A 0316 1DFA 1AE6 0062;0061 1DFA 0316 1AE6 059A 0062;0061 1DFA 0316 1AE6 059A 0062;0061 1DFA 0316 1AE6 059A 0062;0061 1DFA 0316 1AE6 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, COMBINING DOUBLE ARCH BELOW, LATIN SMALL LETTER B +0061 1AE6 059A 0316 1DFA 0062;0061 1DFA 1AE6 0316 059A 0062;0061 1DFA 1AE6 0316 059A 0062;0061 1DFA 1AE6 0316 059A 0062;0061 1DFA 1AE6 0316 059A 0062; # (a◌᫦◌֚◌̖◌᷺b; a◌᷺◌᫦◌̖◌֚b; a◌᷺◌᫦◌̖◌֚b; a◌᷺◌᫦◌̖◌֚b; a◌᷺◌᫦◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOUBLE ARCH BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE7 0062;00E0 05AE 1AE7 0315 0062;0061 05AE 0300 1AE7 0315 0062;00E0 05AE 1AE7 0315 0062;0061 05AE 0300 1AE7 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 DOUBLE ARCH ABOVE, LATIN SMALL LETTER B +0061 1AE7 0315 0300 05AE 0062;0061 05AE 1AE7 0300 0315 0062;0061 05AE 1AE7 0300 0315 0062;0061 05AE 1AE7 0300 0315 0062;0061 05AE 1AE7 0300 0315 0062; # (a◌᫧◌̕◌̀◌֮b; a◌֮◌᫧◌̀◌̕b; a◌֮◌᫧◌̀◌̕b; a◌֮◌᫧◌̀◌̕b; a◌֮◌᫧◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE ARCH ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE8 0062;00E0 05AE 1AE8 0315 0062;0061 05AE 0300 1AE8 0315 0062;00E0 05AE 1AE8 0315 0062;0061 05AE 0300 1AE8 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 EQUALS SIGN ABOVE, LATIN SMALL LETTER B +0061 1AE8 0315 0300 05AE 0062;0061 05AE 1AE8 0300 0315 0062;0061 05AE 1AE8 0300 0315 0062;0061 05AE 1AE8 0300 0315 0062;0061 05AE 1AE8 0300 0315 0062; # (a◌᫨◌̕◌̀◌֮b; a◌֮◌᫨◌̀◌̕b; a◌֮◌᫨◌̀◌̕b; a◌֮◌᫨◌̀◌̕b; a◌֮◌᫨◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING EQUALS SIGN ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AE9 0062;00E0 05AE 1AE9 0315 0062;0061 05AE 0300 1AE9 0315 0062;00E0 05AE 1AE9 0315 0062;0061 05AE 0300 1AE9 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 LEFT ANGLE CENTRED ABOVE, LATIN SMALL LETTER B +0061 1AE9 0315 0300 05AE 0062;0061 05AE 1AE9 0300 0315 0062;0061 05AE 1AE9 0300 0315 0062;0061 05AE 1AE9 0300 0315 0062;0061 05AE 1AE9 0300 0315 0062; # (a◌᫩◌̕◌̀◌֮b; a◌֮◌᫩◌̀◌̕b; a◌֮◌᫩◌̀◌̕b; a◌֮◌᫩◌̀◌̕b; a◌֮◌᫩◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT ANGLE CENTRED ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1AEA 0062;00E0 05AE 1AEA 0315 0062;0061 05AE 0300 1AEA 0315 0062;00E0 05AE 1AEA 0315 0062;0061 05AE 0300 1AEA 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 UPWARDS ARROW ABOVE, LATIN SMALL LETTER B +0061 1AEA 0315 0300 05AE 0062;0061 05AE 1AEA 0300 0315 0062;0061 05AE 1AEA 0300 0315 0062;0061 05AE 1AEA 0300 0315 0062;0061 05AE 1AEA 0300 0315 0062; # (a◌᫪◌̕◌̀◌֮b; a◌֮◌᫪◌̀◌̕b; a◌֮◌᫪◌̀◌̕b; a◌֮◌᫪◌̀◌̕b; a◌֮◌᫪◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING UPWARDS ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0345 035D 035C 1AEB 0062;0061 035C 035D 1AEB 0345 0062;0061 035C 035D 1AEB 0345 0062;0061 035C 035D 1AEB 0345 0062;0061 035C 035D 1AEB 0345 0062; # (a◌ͅ◌͝◌͜◌᫫b; a◌͜◌͝◌᫫◌ͅb; a◌͜◌͝◌᫫◌ͅb; a◌͜◌͝◌᫫◌ͅb; a◌͜◌͝◌᫫◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING DOUBLE RIGHTWARDS ARROW ABOVE, LATIN SMALL LETTER B +0061 1AEB 0345 035D 035C 0062;0061 035C 1AEB 035D 0345 0062;0061 035C 1AEB 035D 0345 0062;0061 035C 1AEB 035D 0345 0062;0061 035C 1AEB 035D 0345 0062; # (a◌᫫◌ͅ◌͝◌͜b; a◌͜◌᫫◌͝◌ͅb; a◌͜◌᫫◌͝◌ͅb; a◌͜◌᫫◌͝◌ͅb; a◌͜◌᫫◌͝◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE RIGHTWARDS ARROW ABOVE, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B 0061 3099 093C 16FF0 1B34 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062; # (a◌゙◌𖿰़◌᬴b; a𖿰◌़◌᬴◌゙b; a𖿰◌़◌᬴◌゙b; a𖿰◌़◌᬴◌゙b; a𖿰◌़◌᬴◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, VIETNAMESE ALTERNATE READING MARK CA, BALINESE SIGN REREKAN, LATIN SMALL LETTER B 0061 1B34 3099 093C 16FF0 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062; # (a◌᬴◌゙◌𖿰़b; a𖿰◌᬴◌़◌゙b; a𖿰◌᬴◌़◌゙b; a𖿰◌᬴◌़◌゙b; a𖿰◌᬴◌़◌゙b; ) LATIN SMALL LETTER A, BALINESE SIGN REREKAN, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, VIETNAMESE ALTERNATE READING MARK CA, LATIN SMALL LETTER B 0061 05B0 094D 3099 1B44 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 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, BALINESE ADEG ADEG, LATIN SMALL LETTER B @@ -18646,6 +18701,10 @@ 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 10EFA 0062;0061 1DFA 0316 10EFA 059A 0062;0061 1DFA 0316 10EFA 059A 0062;0061 1DFA 0316 10EFA 059A 0062;0061 1DFA 0316 10EFA 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 DOUBLE VERTICAL BAR BELOW, LATIN SMALL LETTER B +0061 10EFA 059A 0316 1DFA 0062;0061 1DFA 10EFA 0316 059A 0062;0061 1DFA 10EFA 0316 059A 0062;0061 1DFA 10EFA 0316 059A 0062;0061 1DFA 10EFA 0316 059A 0062; # (a◌𐻺◌֚◌̖◌᷺b; a◌᷺◌𐻺◌̖◌֚b; a◌᷺◌𐻺◌̖◌֚b; a◌᷺◌𐻺◌̖◌֚b; a◌᷺◌𐻺◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC DOUBLE VERTICAL BAR BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B +0061 059A 0316 1DFA 10EFB 0062;0061 1DFA 0316 10EFB 059A 0062;0061 1DFA 0316 10EFB 059A 0062;0061 1DFA 0316 10EFB 059A 0062;0061 1DFA 0316 10EFB 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 NOON, LATIN SMALL LETTER B +0061 10EFB 059A 0316 1DFA 0062;0061 1DFA 10EFB 0316 059A 0062;0061 1DFA 10EFB 0316 059A 0062;0061 1DFA 10EFB 0316 059A 0062;0061 1DFA 10EFB 0316 059A 0062; # (a◌𐻻◌֚◌̖◌᷺b; a◌᷺◌𐻻◌̖◌֚b; a◌᷺◌𐻻◌̖◌֚b; a◌᷺◌𐻻◌̖◌֚b; a◌᷺◌𐻻◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW NOON, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, 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 @@ -19018,6 +19077,16 @@ FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE 0061 1E5EE 0315 0300 05AE 0062;0061 05AE 1E5EE 0300 0315 0062;0061 05AE 1E5EE 0300 0315 0062;0061 05AE 1E5EE 0300 0315 0062;0061 05AE 1E5EE 0300 0315 0062; # (a◌𞗮◌̕◌̀◌֮b; a◌֮◌𞗮◌̀◌̕b; a◌֮◌𞗮◌̀◌̕b; a◌֮◌𞗮◌̀◌̕b; a◌֮◌𞗮◌̀◌̕b; ) LATIN SMALL LETTER A, OL ONAL SIGN MU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 1DFA 1E5EF 0062;0061 1DFA 0316 1E5EF 059A 0062;0061 1DFA 0316 1E5EF 059A 0062;0061 1DFA 0316 1E5EF 059A 0062;0061 1DFA 0316 1E5EF 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, OL ONAL SIGN IKIR, LATIN SMALL LETTER B 0061 1E5EF 059A 0316 1DFA 0062;0061 1DFA 1E5EF 0316 059A 0062;0061 1DFA 1E5EF 0316 059A 0062;0061 1DFA 1E5EF 0316 059A 0062;0061 1DFA 1E5EF 0316 059A 0062; # (a◌𞗯◌֚◌̖◌᷺b; a◌᷺◌𞗯◌̖◌֚b; a◌᷺◌𞗯◌̖◌֚b; a◌᷺◌𞗯◌̖◌֚b; a◌᷺◌𞗯◌̖◌֚b; ) LATIN SMALL LETTER A, OL ONAL SIGN IKIR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, COMBINING DOT BELOW LEFT, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E6E3 0062;00E0 05AE 1E6E3 0315 0062;0061 05AE 0300 1E6E3 0315 0062;00E0 05AE 1E6E3 0315 0062;0061 05AE 0300 1E6E3 0315 0062; # (a◌̕◌̀◌֮◌𞛣b; à◌֮◌𞛣◌̕b; a◌֮◌̀◌𞛣◌̕b; à◌֮◌𞛣◌̕b; a◌֮◌̀◌𞛣◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI YO SIGN UE, LATIN SMALL LETTER B +0061 1E6E3 0315 0300 05AE 0062;0061 05AE 1E6E3 0300 0315 0062;0061 05AE 1E6E3 0300 0315 0062;0061 05AE 1E6E3 0300 0315 0062;0061 05AE 1E6E3 0300 0315 0062; # (a◌𞛣◌̕◌̀◌֮b; a◌֮◌𞛣◌̀◌̕b; a◌֮◌𞛣◌̀◌̕b; a◌֮◌𞛣◌̀◌̕b; a◌֮◌𞛣◌̀◌̕b; ) LATIN SMALL LETTER A, TAI YO SIGN UE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E6E6 0062;00E0 05AE 1E6E6 0315 0062;0061 05AE 0300 1E6E6 0315 0062;00E0 05AE 1E6E6 0315 0062;0061 05AE 0300 1E6E6 0315 0062; # (a◌̕◌̀◌֮◌𞛦b; à◌֮◌𞛦◌̕b; a◌֮◌̀◌𞛦◌̕b; à◌֮◌𞛦◌̕b; a◌֮◌̀◌𞛦◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI YO SIGN AU, LATIN SMALL LETTER B +0061 1E6E6 0315 0300 05AE 0062;0061 05AE 1E6E6 0300 0315 0062;0061 05AE 1E6E6 0300 0315 0062;0061 05AE 1E6E6 0300 0315 0062;0061 05AE 1E6E6 0300 0315 0062; # (a◌𞛦◌̕◌̀◌֮b; a◌֮◌𞛦◌̀◌̕b; a◌֮◌𞛦◌̀◌̕b; a◌֮◌𞛦◌̀◌̕b; a◌֮◌𞛦◌̀◌̕b; ) LATIN SMALL LETTER A, TAI YO SIGN AU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E6EE 0062;00E0 05AE 1E6EE 0315 0062;0061 05AE 0300 1E6EE 0315 0062;00E0 05AE 1E6EE 0315 0062;0061 05AE 0300 1E6EE 0315 0062; # (a◌̕◌̀◌֮◌𞛮b; à◌֮◌𞛮◌̕b; a◌֮◌̀◌𞛮◌̕b; à◌֮◌𞛮◌̕b; a◌֮◌̀◌𞛮◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI YO SIGN AY, LATIN SMALL LETTER B +0061 1E6EE 0315 0300 05AE 0062;0061 05AE 1E6EE 0300 0315 0062;0061 05AE 1E6EE 0300 0315 0062;0061 05AE 1E6EE 0300 0315 0062;0061 05AE 1E6EE 0300 0315 0062; # (a◌𞛮◌̕◌̀◌֮b; a◌֮◌𞛮◌̀◌̕b; a◌֮◌𞛮◌̀◌̕b; a◌֮◌𞛮◌̀◌̕b; a◌֮◌𞛮◌̀◌̕b; ) LATIN SMALL LETTER A, TAI YO SIGN AY, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E6EF 0062;00E0 05AE 1E6EF 0315 0062;0061 05AE 0300 1E6EF 0315 0062;00E0 05AE 1E6EF 0315 0062;0061 05AE 0300 1E6EF 0315 0062; # (a◌̕◌̀◌֮◌𞛯b; à◌֮◌𞛯◌̕b; a◌֮◌̀◌𞛯◌̕b; à◌֮◌𞛯◌̕b; a◌֮◌̀◌𞛯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI YO SIGN ANG, LATIN SMALL LETTER B +0061 1E6EF 0315 0300 05AE 0062;0061 05AE 1E6EF 0300 0315 0062;0061 05AE 1E6EF 0300 0315 0062;0061 05AE 1E6EF 0300 0315 0062;0061 05AE 1E6EF 0300 0315 0062; # (a◌𞛯◌̕◌̀◌֮b; a◌֮◌𞛯◌̀◌̕b; a◌֮◌𞛯◌̀◌̕b; a◌֮◌𞛯◌̀◌̕b; a◌֮◌𞛯◌̀◌̕b; ) LATIN SMALL LETTER A, TAI YO SIGN ANG, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B +0061 0315 0300 05AE 1E6F5 0062;00E0 05AE 1E6F5 0315 0062;0061 05AE 0300 1E6F5 0315 0062;00E0 05AE 1E6F5 0315 0062;0061 05AE 0300 1E6F5 0315 0062; # (a◌̕◌̀◌֮◌𞛵b; à◌֮◌𞛵◌̕b; a◌֮◌̀◌𞛵◌̕b; à◌֮◌𞛵◌̕b; a◌֮◌̀◌𞛵◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI YO SIGN OM, LATIN SMALL LETTER B +0061 1E6F5 0315 0300 05AE 0062;0061 05AE 1E6F5 0300 0315 0062;0061 05AE 1E6F5 0300 0315 0062;0061 05AE 1E6F5 0300 0315 0062;0061 05AE 1E6F5 0300 0315 0062; # (a◌𞛵◌̕◌̀◌֮b; a◌֮◌𞛵◌̀◌̕b; a◌֮◌𞛵◌̀◌̕b; a◌֮◌𞛵◌̀◌̕b; a◌֮◌𞛵◌̀◌̕b; ) LATIN SMALL LETTER A, TAI YO SIGN OM, 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 diff --git a/admin/unidata/PropertyValueAliases.txt b/admin/unidata/PropertyValueAliases.txt index fa46bdcd2e3..f3ef7938ae9 100644 --- a/admin/unidata/PropertyValueAliases.txt +++ b/admin/unidata/PropertyValueAliases.txt @@ -1,6 +1,6 @@ -# PropertyValueAliases-16.0.0.txt -# Date: 2024-07-30, 19:59:00 GMT -# © 2024 Unicode®, Inc. +# PropertyValueAliases-17.0.0.txt +# Date: 2025-06-30, 06:16:21 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -93,6 +93,7 @@ age; 14.0 ; V14_0 age; 15.0 ; V15_0 age; 15.1 ; V15_1 age; 16.0 ; V16_0 +age; 17.0 ; V17_0 age; NA ; Unassigned # Alphabetic (Alpha) @@ -179,6 +180,7 @@ blk; Bamum_Sup ; Bamum_Supplement blk; Bassa_Vah ; Bassa_Vah blk; Batak ; Batak blk; Bengali ; Bengali +blk; Beria_Erfe ; Beria_Erfe blk; Bhaiksuki ; Bhaiksuki blk; Block_Elements ; Block_Elements blk; Bopomofo ; Bopomofo @@ -211,6 +213,7 @@ blk; CJK_Ext_F ; CJK_Unified_Ideographs_Extension_F blk; CJK_Ext_G ; CJK_Unified_Ideographs_Extension_G blk; CJK_Ext_H ; CJK_Unified_Ideographs_Extension_H blk; CJK_Ext_I ; CJK_Unified_Ideographs_Extension_I +blk; CJK_Ext_J ; CJK_Unified_Ideographs_Extension_J blk; CJK_Radicals_Sup ; CJK_Radicals_Supplement blk; CJK_Strokes ; CJK_Strokes blk; CJK_Symbols ; CJK_Symbols_And_Punctuation @@ -360,6 +363,7 @@ blk; Misc_Math_Symbols_A ; Miscellaneous_Mathematical_Symbols_A blk; Misc_Math_Symbols_B ; Miscellaneous_Mathematical_Symbols_B blk; Misc_Pictographs ; Miscellaneous_Symbols_And_Pictographs blk; Misc_Symbols ; Miscellaneous_Symbols +blk; Misc_Symbols_Sup ; Miscellaneous_Symbols_Supplement blk; Misc_Technical ; Miscellaneous_Technical blk; Modi ; Modi blk; Modifier_Letters ; Spacing_Modifier_Letters @@ -419,9 +423,11 @@ blk; Runic ; Runic blk; Samaritan ; Samaritan blk; Saurashtra ; Saurashtra blk; Sharada ; Sharada +blk; Sharada_Sup ; Sharada_Supplement blk; Shavian ; Shavian blk; Shorthand_Format_Controls ; Shorthand_Format_Controls blk; Siddham ; Siddham +blk; Sidetic ; Sidetic blk; Sinhala ; Sinhala blk; Sinhala_Archaic_Numbers ; Sinhala_Archaic_Numbers blk; Small_Forms ; Small_Form_Variants @@ -456,12 +462,14 @@ blk; Tai_Le ; Tai_Le blk; Tai_Tham ; Tai_Tham blk; Tai_Viet ; Tai_Viet blk; Tai_Xuan_Jing ; Tai_Xuan_Jing_Symbols +blk; Tai_Yo ; Tai_Yo blk; Takri ; Takri blk; Tamil ; Tamil blk; Tamil_Sup ; Tamil_Supplement blk; Tangsa ; Tangsa blk; Tangut ; Tangut blk; Tangut_Components ; Tangut_Components +blk; Tangut_Components_Sup ; Tangut_Components_Supplement blk; Tangut_Sup ; Tangut_Supplement blk; Telugu ; Telugu blk; Thaana ; Thaana @@ -470,6 +478,7 @@ blk; Tibetan ; Tibetan blk; Tifinagh ; Tifinagh blk; Tirhuta ; Tirhuta blk; Todhri ; Todhri +blk; Tolong_Siki ; Tolong_Siki blk; Toto ; Toto blk; Transport_And_Map ; Transport_And_Map_Symbols blk; Tulu_Tigalari ; Tulu_Tigalari @@ -878,7 +887,7 @@ InPC; Bottom_And_Left ; Bottom_And_Left InPC; Bottom_And_Right ; Bottom_And_Right InPC; Left ; Left InPC; Left_And_Right ; Left_And_Right -InPC; NA ; NA +InPC; NA ; Not_Applicable InPC; Overstruck ; Overstruck InPC; Right ; Right InPC; Top ; Top @@ -1088,6 +1097,7 @@ jg ; Taw ; Taw jg ; Teh_Marbuta ; Teh_Marbuta jg ; Teh_Marbuta_Goal ; Teh_Marbuta_Goal ; Hamza_On_Heh_Goal jg ; Teth ; Teth +jg ; Thin_Noon ; Thin_Noon jg ; Thin_Yeh ; Thin_Yeh jg ; Vertical_Tail ; Vertical_Tail jg ; Waw ; Waw @@ -1131,6 +1141,7 @@ lb ; EX ; Exclamation lb ; GL ; Glue lb ; H2 ; H2 lb ; H3 ; H3 +lb ; HH ; Unambiguous_Hyphen lb ; HL ; Hebrew_Letter lb ; HY ; Hyphen lb ; ID ; Ideographic @@ -1319,6 +1330,7 @@ sc ; Bamu ; Bamum sc ; Bass ; Bassa_Vah sc ; Batk ; Batak sc ; Beng ; Bengali +sc ; Berf ; Beria_Erfe sc ; Bhks ; Bhaiksuki sc ; Bopo ; Bopomofo sc ; Brah ; Brahmi @@ -1438,6 +1450,7 @@ sc ; Sgnw ; SignWriting sc ; Shaw ; Shavian sc ; Shrd ; Sharada sc ; Sidd ; Siddham +sc ; Sidt ; Sidetic sc ; Sind ; Khudawadi sc ; Sinh ; Sinhala sc ; Sogd ; Sogdian @@ -1455,6 +1468,7 @@ sc ; Talu ; New_Tai_Lue sc ; Taml ; Tamil sc ; Tang ; Tangut sc ; Tavt ; Tai_Viet +sc ; Tayo ; Tai_Yo sc ; Telu ; Telugu sc ; Tfng ; Tifinagh sc ; Tglg ; Tagalog @@ -1464,6 +1478,7 @@ sc ; Tibt ; Tibetan sc ; Tirh ; Tirhuta sc ; Tnsa ; Tangsa sc ; Todr ; Todhri +sc ; Tols ; Tolong_Siki sc ; Toto ; Toto sc ; Tutg ; Tulu_Tigalari sc ; Ugar ; Ugaritic @@ -1705,4 +1720,16 @@ kEH_NoMirror; Y ; Yes ; T kEH_NoRotate; N ; No ; F ; False kEH_NoRotate; Y ; Yes ; T ; True +# kMandarin (cjkMandarin) + +# @missing: 0000..10FFFF; kMandarin; + +# kTotalStrokes (cjkTotalStrokes) + +# @missing: 0000..10FFFF; kTotalStrokes; + +# kUnihanCore2020 (cjkUnihanCore2020) + +# @missing: 0000..10FFFF; kUnihanCore2020; + # EOF diff --git a/admin/unidata/ScriptExtensions.txt b/admin/unidata/ScriptExtensions.txt index 140901a872c..98b8d0fb06e 100644 --- a/admin/unidata/ScriptExtensions.txt +++ b/admin/unidata/ScriptExtensions.txt @@ -1,6 +1,6 @@ -# ScriptExtensions-16.0.0.txt -# Date: 2024-07-30, 19:38:00 GMT -# © 2024 Unicode®, Inc. +# ScriptExtensions-17.0.0.txt +# Date: 2025-08-01, 21:42:00 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -38,9 +38,9 @@ 0303 ; Glag Latn Sunu Syrc Thai # Mn COMBINING TILDE 0304 ; Aghb Cher Copt Cyrl Goth Grek Latn Osge Syrc Tfng Todr #Mn COMBINING MACRON 0305 ; Copt Elba Glag Goth Kana Latn # Mn COMBINING OVERLINE -0306 ; Cyrl Grek Latn Perm # Mn COMBINING BREVE +0306 ; Cyrl Grek Latn Perm Tfng # Mn COMBINING BREVE 0307 ; Copt Dupl Hebr Latn Perm Syrc Tale Tfng Todr #Mn COMBINING DOT ABOVE -0308 ; Armn Cyrl Dupl Goth Grek Hebr Latn Perm Syrc Tale #Mn COMBINING DIAERESIS +0308 ; Armn Cyrl Dupl Goth Grek Hebr Latn Perm Syrc Tale Tfng #Mn COMBINING DIAERESIS 0309 ; Latn Tfng # Mn COMBINING HOOK ABOVE 030A ; Dupl Latn Syrc # Mn COMBINING RING ABOVE 030B ; Cher Cyrl Latn Osge # Mn COMBINING DOUBLE ACUTE ACCENT @@ -50,14 +50,13 @@ 0310 ; Latn Sunu # Mn COMBINING CANDRABINDU 0311 ; Cyrl Latn Todr # Mn COMBINING INVERTED BREVE 0313 ; Grek Latn Perm Todr # Mn COMBINING COMMA ABOVE -0320 ; Latn Syrc # Mn COMBINING MINUS SIGN BELOW -0323 ; Cher Dupl Kana Latn Syrc # Mn COMBINING DOT BELOW +0323 ; Cher Dupl Kana Latn Syrc Tfng # Mn COMBINING DOT BELOW 0324 ; Cher Dupl Latn Syrc # Mn COMBINING DIAERESIS BELOW 0325 ; Latn Syrc # Mn COMBINING RING BELOW 032D ; Latn Sunu Syrc # Mn COMBINING CIRCUMFLEX ACCENT BELOW 032E ; Latn Syrc # Mn COMBINING BREVE BELOW 0330 ; Cher Latn Syrc # Mn COMBINING TILDE BELOW -0331 ; Aghb Cher Goth Latn Sunu Thai # Mn COMBINING MACRON BELOW +0331 ; Aghb Cher Goth Latn Sunu Syrc Thai #Mn COMBINING MACRON BELOW 0342 ; Grek # Mn COMBINING GREEK PERISPOMENI 0345 ; Grek # Mn COMBINING GREEK YPOGEGRAMMENI 0358 ; Latn Osge # Mn COMBINING DOT ABOVE RIGHT @@ -79,8 +78,8 @@ 0660..0669 ; Arab Thaa Yezi # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE 0670 ; Arab Syrc # Mn ARABIC LETTER SUPERSCRIPT ALEF 06D4 ; Arab Rohg # Po ARABIC FULL STOP -0951 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Shrd Taml Telu Tirh #Mn DEVANAGARI STRESS SIGN UDATTA -0952 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Orya Taml Telu Tirh #Mn DEVANAGARI STRESS SIGN ANUDATTA +0951 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Nand Newa Orya Shrd Taml Telu Tirh #Mn DEVANAGARI STRESS SIGN UDATTA +0952 ; Beng Deva Gran Gujr Guru Knda Latn Mlym Newa Orya Taml Telu Tirh #Mn DEVANAGARI STRESS SIGN ANUDATTA 0964 ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Onao Orya Sind Sinh Sylo Takr Taml Telu Tirh #Po DEVANAGARI DANDA 0965 ; Beng Deva Dogr Gong Gonm Gran Gujr Gukh Guru Knda Limb Mahj Mlym Nand Onao Orya Sind Sinh Sylo Takr Taml Telu Tirh #Po DEVANAGARI DOUBLE DANDA 0966..096F ; Deva Dogr Kthi Mahj # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE @@ -102,9 +101,10 @@ 1CD2 ; Beng Deva Gran Knda # Mn VEDIC TONE PRENKHA 1CD3 ; Deva Gran Knda # Po VEDIC SIGN NIHSHVASA 1CD4 ; Deva # Mn VEDIC SIGN YAJURVEDIC MIDLINE SVARITA -1CD5..1CD6 ; Beng Deva # Mn [2] VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA..VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA -1CD7 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA -1CD8 ; Beng Deva # Mn VEDIC TONE CANDRA BELOW +1CD5 ; Beng Deva Newa Telu Tirh # Mn VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA +1CD6 ; Beng Deva Telu # Mn VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA +1CD7 ; Deva Newa Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA +1CD8 ; Beng Deva Newa Telu # Mn VEDIC TONE CANDRA BELOW 1CD9 ; Deva Shrd # Mn VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER 1CDA ; Deva Knda Mlym Orya Taml Telu # Mn VEDIC TONE DOUBLE SVARITA 1CDB ; Deva # Mn VEDIC TONE TRIPLE SVARITA @@ -112,11 +112,13 @@ 1CDE..1CDF ; Deva # Mn [2] VEDIC TONE TWO DOTS BELOW..VEDIC TONE THREE DOTS BELOW 1CE0 ; Deva Shrd # Mn VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA 1CE1 ; Beng Deva # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA -1CE2..1CE8 ; Deva # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL -1CE9 ; Deva Nand # Lo VEDIC SIGN ANUSVARA ANTARGOMUKHA -1CEA ; Beng Deva # Lo VEDIC SIGN ANUSVARA BAHIRGOMUKHA -1CEB..1CEC ; Deva # Lo [2] VEDIC SIGN ANUSVARA VAMAGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL -1CED ; Beng Deva # Mn VEDIC SIGN TIRYAK +1CE2 ; Deva Newa Tirh # Mn VEDIC SIGN VISARGA SVARITA +1CE3..1CE8 ; Deva # Mn [6] VEDIC SIGN VISARGA UDATTA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CE9 ; Deva Nand Newa # Lo VEDIC SIGN ANUSVARA ANTARGOMUKHA +1CEA ; Beng Deva Shrd # Lo VEDIC SIGN ANUSVARA BAHIRGOMUKHA +1CEB ; Deva Newa # Lo VEDIC SIGN ANUSVARA VAMAGOMUKHA +1CEC ; Deva # Lo VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CED ; Beng Deva Newa Shrd # Mn VEDIC SIGN TIRYAK 1CEE..1CF1 ; Deva # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA 1CF2 ; Beng Deva Gran Knda Mlym Nand Orya Sinh Telu Tirh Tutg #Lo VEDIC SIGN ARDHAVISARGA 1CF3 ; Deva Gran # Lo VEDIC SIGN ROTATED ARDHAVISARGA diff --git a/admin/unidata/Scripts.txt b/admin/unidata/Scripts.txt index 443a6d2dd61..5574fdd6ae3 100644 --- a/admin/unidata/Scripts.txt +++ b/admin/unidata/Scripts.txt @@ -1,6 +1,6 @@ -# Scripts-16.0.0.txt -# Date: 2024-04-30, 21:48:40 GMT -# © 2024 Unicode®, Inc. +# Scripts-17.0.0.txt +# Date: 2025-07-24, 13:28:55 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -154,7 +154,7 @@ 208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN 208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS 208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS -20A0..20C0 ; Common # Sc [33] EURO-CURRENCY SIGN..SOM SIGN +20A0..20C1 ; Common # Sc [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN 2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT 2102 ; Common # L& DOUBLE-STRUCK CAPITAL C 2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA @@ -306,8 +306,7 @@ 2B45..2B46 ; Common # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW 2B47..2B4C ; Common # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR 2B4D..2B73 ; Common # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B76..2B95 ; Common # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B97..2BFF ; Common # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2B76..2BFF ; Common # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL 2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER 2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET 2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET @@ -524,7 +523,11 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR 1BCA0..1BCA3 ; Common # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP 1CC00..1CCEF ; Common # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z 1CCF0..1CCF9 ; Common # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CCFA..1CCFC ; Common # So [3] SNAKE SYMBOL..NOSE SYMBOL 1CD00..1CEB3 ; Common # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET +1CEBA..1CED0 ; Common # So [23] FRAGILE SYMBOL..LEUKOTHEA +1CEE0..1CEEF ; Common # So [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA +1CEF0 ; Common # Sm MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR 1CF50..1CFC3 ; Common # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; Common # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 @@ -605,11 +608,10 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR 1F260..1F265 ; Common # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI 1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA 1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 -1F400..1F6D7 ; Common # So [728] RAT..ELEVATOR +1F400..1F6D8 ; Common # So [729] RAT..LANDSLIDE 1F6DC..1F6EC ; Common # So [17] WIRELESS..AIRPLANE ARRIVING 1F6F0..1F6FC ; Common # So [13] SATELLITE..ROLLER SKATE -1F700..1F776 ; Common # So [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE -1F77B..1F7D9 ; Common # So [95] HAUMEA..NINE POINTED WHITE STAR +1F700..1F7D9 ; Common # So [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR 1F7E0..1F7EB ; Common # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE 1F7F0 ; Common # So HEAVY EQUALS SIGN 1F800..1F80B ; Common # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD @@ -619,21 +621,24 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR 1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8BB ; Common # So [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR 1F8C0..1F8C1 ; Common # So [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW -1F900..1FA53 ; Common # So [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP +1F8D0..1F8D8 ; Common # Sm [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE +1F900..1FA57 ; Common # So [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL 1FA60..1FA6D ; Common # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA7C ; Common # So [13] BALLET SHOES..CRUTCH -1FA80..1FA89 ; Common # So [10] YO-YO..HARP -1FA8F..1FAC6 ; Common # So [56] SHOVEL..FINGERPRINT -1FACE..1FADC ; Common # So [15] MOOSE..ROOT VEGETABLE -1FADF..1FAE9 ; Common # So [11] SPLATTER..FACE WITH BAGS UNDER EYES -1FAF0..1FAF8 ; Common # So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND +1FA80..1FA8A ; Common # So [11] YO-YO..TROMBONE +1FA8E..1FAC6 ; Common # So [57] TREASURE CHEST..FINGERPRINT +1FAC8 ; Common # So HAIRY CREATURE +1FACD..1FADC ; Common # So [16] ORCA..ROOT VEGETABLE +1FADF..1FAEA ; Common # So [12] SPLATTER..DISTORTED FACE +1FAEF..1FAF8 ; Common # So [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND 1FB00..1FB92 ; Common # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBEF ; Common # So [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE 1FBF0..1FBF9 ; Common # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE +1FBFA ; Common # So ALARM BELL SYMBOL E0001 ; Common # Cf LANGUAGE TAG E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG -# Total code points: 9053 +# Total code points: 9123 # ================================================ @@ -648,8 +653,8 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG 01BC..01BF ; Latin # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; Latin # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; Latin # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; Latin # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; Latin # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; Latin # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; Latin # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02B8 ; Latin # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y 02E0..02E4 ; Latin # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP 1D00..1D25 ; Latin # L& [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN @@ -676,11 +681,8 @@ A770 ; Latin # Lm MODIFIER LETTER US A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; Latin # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; Latin # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; Latin # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; Latin # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; Latin # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; Latin # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Latin # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Latin # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -702,7 +704,7 @@ FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1DF0B..1DF1E ; Latin # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1DF25..1DF2A ; Latin # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK -# Total code points: 1487 +# Total code points: 1492 # ================================================ @@ -869,7 +871,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU 0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE 0870..0887 ; Arabic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT 0888 ; Arabic # Sk ARABIC RAISED ROUND DOT -0889..088E ; Arabic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; Arabic # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0890..0891 ; Arabic # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 0897..089F ; Arabic # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; Arabic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF @@ -878,11 +880,13 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU 08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FBB2..FBC2 ; Arabic # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FBC3..FBD2 ; Arabic # So [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD40..FD4F ; Arabic # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD90..FD91 ; Arabic # So [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FDCF ; Arabic # So ARABIC LIGATURE SALAAMUHU ALAYNAA +FDC8..FDCF ; Arabic # So [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB ; Arabic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC ; Arabic # Sc RIAL SIGN FDFD..FDFF ; Arabic # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL @@ -890,7 +894,11 @@ FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM 10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS 10EC2..10EC4 ; Arabic # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC..10EFF ; Arabic # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; Arabic # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; Arabic # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10ED0 ; Arabic # Po ARABIC BIBLICAL END OF VERSE +10ED1..10ED8 ; Arabic # So [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH +10EFA..10EFF ; Arabic # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 1EE00..1EE03 ; Arabic # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL 1EE05..1EE1F ; Arabic # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF 1EE21..1EE22 ; Arabic # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM @@ -926,7 +934,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA 1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL -# Total code points: 1373 +# Total code points: 1413 # ================================================ @@ -1155,7 +1163,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY 0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; Telugu # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; Telugu # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; Telugu # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; Telugu # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -1163,7 +1171,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY 0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR 0C7F ; Telugu # So TELUGU SIGN TUUMU -# Total code points: 100 +# Total code points: 101 # ================================================ @@ -1186,14 +1194,14 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY 0CCA..0CCB ; Kannada # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; Kannada # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; Kannada # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; Kannada # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; Kannada # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE 0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0CF3 ; Kannada # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT -# Total code points: 91 +# Total code points: 92 # ================================================ @@ -1594,17 +1602,18 @@ FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILI 16FE2 ; Han # Po OLD CHINESE HOOK MARK 16FE3 ; Han # Lm OLD CHINESE ITERATION MARK 16FF0..16FF1 ; Han # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +16FF2..16FF3 ; Han # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; Han # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS 20000..2A6DF ; Han # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Han # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Han # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Han # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Han # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Han # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Han # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Han # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 99030 +# Total code points: 103351 # ================================================ @@ -1647,7 +1656,8 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE 0951..0954 ; Inherited # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT 1AB0..1ABD ; Inherited # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Inherited # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE ; Inherited # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; Inherited # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Inherited # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA 1CD4..1CE0 ; Inherited # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA 1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL @@ -1676,7 +1686,7 @@ FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CON 1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 657 +# Total code points: 684 # ================================================ @@ -2347,8 +2357,14 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI 111DB ; Sharada # Po SHARADA SIGN SIDDHAM 111DC ; Sharada # Lo SHARADA HEADSTROKE 111DD..111DF ; Sharada # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 +11B60 ; Sharada # Mn SHARADA VOWEL SIGN OE +11B61 ; Sharada # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; Sharada # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; Sharada # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; Sharada # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; Sharada # Mc SHARADA VOWEL SIGN CANDRA O -# Total code points: 96 +# Total code points: 104 # ================================================ @@ -2756,11 +2772,11 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI # ================================================ 16FE0 ; Tangut # Lm TANGUT ITERATION MARK -17000..187F7 ; Tangut # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18AFF ; Tangut # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 -18D00..18D08 ; Tangut # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +17000..18AFF ; Tangut # Lo [6912] TANGUT IDEOGRAPH-17000..TANGUT COMPONENT-768 +18D00..18D1E ; Tangut # Lo [31] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Tangut # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 -# Total code points: 6914 +# Total code points: 7059 # ================================================ @@ -3125,4 +3141,42 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI # Total code points: 80 +# ================================================ + +10940..10959 ; Sidetic # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 + +# Total code points: 26 + +# ================================================ + +1E6C0..1E6DE ; Tai_Yo # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; Tai_Yo # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; Tai_Yo # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; Tai_Yo # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; Tai_Yo # Mn TAI YO SIGN AU +1E6E7..1E6ED ; Tai_Yo # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; Tai_Yo # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; Tai_Yo # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; Tai_Yo # Mn TAI YO SIGN OM +1E6FE ; Tai_Yo # Lo TAI YO SYMBOL MUEANG +1E6FF ; Tai_Yo # Lm TAI YO XAM LAI + +# Total code points: 55 + +# ================================================ + +11DB0..11DD8 ; Tolong_Siki # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; Tolong_Siki # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; Tolong_Siki # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; Tolong_Siki # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE + +# Total code points: 54 + +# ================================================ + +16EA0..16EB8 ; Beria_Erfe # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Beria_Erfe # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY + +# Total code points: 50 + # EOF diff --git a/admin/unidata/SpecialCasing.txt b/admin/unidata/SpecialCasing.txt index e83aba432f4..1013344a6f2 100644 --- a/admin/unidata/SpecialCasing.txt +++ b/admin/unidata/SpecialCasing.txt @@ -1,6 +1,6 @@ -# SpecialCasing-16.0.0.txt -# Date: 2024-05-10, 22:49:00 GMT -# © 2024 Unicode®, Inc. +# SpecialCasing-17.0.0.txt +# Date: 2025-07-31, 22:11:55 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -47,8 +47,8 @@ # # A language ID is defined by BCP 47, with '-' and '_' treated equivalently. # -# A casing context for a character is defined by Section 3.13 Default Case Algorithms -# of The Unicode Standard. +# A casing context for a character is defined in the +# "Conformance" / "Default Case Algorithms" section of the core specification. # # Parsers of this file must be prepared to deal with future additions to this format: # * Additional contexts @@ -57,6 +57,10 @@ # ================================================================================ # Unconditional mappings +# The mappings in this section are not language-sensitive nor context-sensitive. +# +# Note that comments provide additional information but +# do not modify the case mapping algorithms in the core specification, chapter 3. # ================================================================================ # The German es-zed is special--the normal mapping is to SS. diff --git a/admin/unidata/UnicodeData.txt b/admin/unidata/UnicodeData.txt index 64258a37395..fca68e3e154 100644 --- a/admin/unidata/UnicodeData.txt +++ b/admin/unidata/UnicodeData.txt @@ -659,7 +659,7 @@ 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; -0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; +0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Lo;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; @@ -2121,6 +2121,7 @@ 088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; +088F;ARABIC LETTER NOON WITH RING ABOVE;Lo;0;AL;;;;;N;;;;; 0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0897;ARABIC PEPET;Mn;230;NSM;;;;;N;;;;; @@ -2862,6 +2863,7 @@ 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; +0C5C;TELUGU ARCHAIC SHRII;Lo;0;L;;;;;N;;;;; 0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; @@ -2958,6 +2960,7 @@ 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDC;KANNADA ARCHAIC SHRII;Lo;0;L;;;;;N;;;;; 0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; @@ -6137,6 +6140,33 @@ 1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; 1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; 1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; +1ACF;COMBINING DOUBLE CARON;Mn;230;NSM;;;;;N;;;;; +1AD0;COMBINING VERTICAL-LINE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1AD1;COMBINING GRAVE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD2;COMBINING VERTICAL-LINE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD3;COMBINING ACUTE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD4;COMBINING VERTICAL-LINE-MACRON;Mn;230;NSM;;;;;N;;;;; +1AD5;COMBINING MACRON-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD6;COMBINING VERTICAL-LINE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD7;COMBINING VERTICAL-LINE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1AD8;COMBINING MACRON-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD9;COMBINING SHARP SIGN;Mn;230;NSM;;;;;N;;;;; +1ADA;COMBINING FLAT SIGN;Mn;230;NSM;;;;;N;;;;; +1ADB;COMBINING DOWN TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1ADC;COMBINING DIAERESIS WITH RAISED LEFT DOT;Mn;230;NSM;;;;;N;;;;; +1ADD;COMBINING DOT-AND-RING BELOW;Mn;220;NSM;;;;;N;;;;; +1AE0;COMBINING LEFT TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE1;COMBINING RIGHT TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE2;COMBINING MINUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE3;COMBINING INVERTED BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE4;COMBINING SQUARE ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE5;COMBINING SEAGULL ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE6;COMBINING DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;;;;; +1AE7;COMBINING DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE8;COMBINING EQUALS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE9;COMBINING LEFT ANGLE CENTRED ABOVE;Mn;230;NSM;;;;;N;;;;; +1AEA;COMBINING UPWARDS ARROW ABOVE;Mn;230;NSM;;;;;N;;;;; +1AEB;COMBINING DOUBLE RIGHTWARDS ARROW ABOVE;Mn;234;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; @@ -7545,6 +7575,7 @@ 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; 20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; +20C1;SAUDI RIYAL SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -10239,6 +10270,7 @@ 2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;; 2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;; 2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B96;EQUALS SIGN WITH INFINITY ABOVE;So;0;ON;;;;;N;;;;; 2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;; 2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; @@ -14274,10 +14306,14 @@ A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 A7CB;LATIN CAPITAL LETTER RAMS HORN;Lu;0;L;;;;;N;;;;0264; A7CC;LATIN CAPITAL LETTER S WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A7CD; A7CD;LATIN SMALL LETTER S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A7CC;;A7CC +A7CE;LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE;Lu;0;L;;;;;N;;;;A7CF; +A7CF;LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;;;A7CE;;A7CE A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 -A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; -A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; +A7D2;LATIN CAPITAL LETTER DOUBLE THORN;Lu;0;L;;;;;N;;;;A7D3; +A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;A7D2;;A7D2 +A7D4;LATIN CAPITAL LETTER DOUBLE WYNN;Lu;0;L;;;;;N;;;;A7D5; +A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;A7D4;;A7D4 A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; @@ -14285,6 +14321,7 @@ A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 A7DA;LATIN CAPITAL LETTER LAMBDA;Lu;0;L;;;;;N;;;;A7DB; A7DB;LATIN SMALL LETTER LAMBDA;Ll;0;L;;;;;N;;;A7DA;;A7DA A7DC;LATIN CAPITAL LETTER LAMBDA WITH STROKE;Lu;0;L;;;;;N;;;;019B; +A7F1;MODIFIER LETTER CAPITAL S;Lm;0;L; 0053;;;;N;;;;; A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; @@ -15925,6 +15962,22 @@ FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; +FBC3;ARABIC LIGATURE JALLA WA-ALAA;So;0;ON;;;;;N;;;;; +FBC4;ARABIC LIGATURE DAAMAT BARAKAATUHUM;So;0;ON;;;;;N;;;;; +FBC5;ARABIC LIGATURE RAHMATU ALLAAHI TAAALAA ALAYH;So;0;ON;;;;;N;;;;; +FBC6;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIM;So;0;ON;;;;;N;;;;; +FBC7;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIMAA;So;0;ON;;;;;N;;;;; +FBC8;ARABIC LIGATURE RAHIMAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBC9;ARABIC LIGATURE RAHIMAHUMAA ALLAAH;So;0;ON;;;;;N;;;;; +FBCA;ARABIC LIGATURE RAHIMAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUM;So;0;ON;;;;;N;;;;; +FBCC;ARABIC LIGATURE HAFIZAHU ALLAAH;So;0;ON;;;;;N;;;;; +FBCD;ARABIC LIGATURE HAFIZAHU ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCE;ARABIC LIGATURE HAFIZAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCF;ARABIC LIGATURE HAFIZAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBD0;ARABIC LIGATURE SALLALLAAHU TAAALAA ALAYHI WA-SALLAM;So;0;ON;;;;;N;;;;; +FBD1;ARABIC LIGATURE AJJAL ALLAAHU FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;; +FBD2;ARABIC LIGATURE ALAYHI AR-RAHMAH;So;0;ON;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; @@ -16370,6 +16423,8 @@ FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; +FD90;ARABIC LIGATURE RAHMATU ALLAAHI ALAYH;So;0;ON;;;;;N;;;;; +FD91;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA;So;0;ON;;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; @@ -16424,6 +16479,13 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDC8;ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA;So;0;ON;;;;;N;;;;; +FDC9;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANH;So;0;ON;;;;;N;;;;; +FDCA;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHAA;So;0;ON;;;;;N;;;;; +FDCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUMAA;So;0;ON;;;;;N;;;;; +FDCC;ARABIC LIGATURE SALLALLAHU ALAYHI WA-ALAA AALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; +FDCD;ARABIC LIGATURE AJJAL ALLAAHU TAAALAA FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;; +FDCE;ARABIC LIGATURE KARRAMA ALLAAHU WAJHAH;So;0;ON;;;;;N;;;;; FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; @@ -18708,6 +18770,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; 10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; 1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; +10940;SIDETIC LETTER N01;Lo;0;R;;;;;N;;;;; +10941;SIDETIC LETTER N02;Lo;0;R;;;;;N;;;;; +10942;SIDETIC LETTER N03;Lo;0;R;;;;;N;;;;; +10943;SIDETIC LETTER N04;Lo;0;R;;;;;N;;;;; +10944;SIDETIC LETTER N05;Lo;0;R;;;;;N;;;;; +10945;SIDETIC LETTER N06;Lo;0;R;;;;;N;;;;; +10946;SIDETIC LETTER N07;Lo;0;R;;;;;N;;;;; +10947;SIDETIC LETTER N08;Lo;0;R;;;;;N;;;;; +10948;SIDETIC LETTER N09;Lo;0;R;;;;;N;;;;; +10949;SIDETIC LETTER N10;Lo;0;R;;;;;N;;;;; +1094A;SIDETIC LETTER N11;Lo;0;R;;;;;N;;;;; +1094B;SIDETIC LETTER N12;Lo;0;R;;;;;N;;;;; +1094C;SIDETIC LETTER N13;Lo;0;R;;;;;N;;;;; +1094D;SIDETIC LETTER N14;Lo;0;R;;;;;N;;;;; +1094E;SIDETIC LETTER N15;Lo;0;R;;;;;N;;;;; +1094F;SIDETIC LETTER N16;Lo;0;R;;;;;N;;;;; +10950;SIDETIC LETTER N17;Lo;0;R;;;;;N;;;;; +10951;SIDETIC LETTER N18;Lo;0;R;;;;;N;;;;; +10952;SIDETIC LETTER N19;Lo;0;R;;;;;N;;;;; +10953;SIDETIC LETTER N20;Lo;0;R;;;;;N;;;;; +10954;SIDETIC LETTER N21;Lo;0;R;;;;;N;;;;; +10955;SIDETIC LETTER N22;Lo;0;R;;;;;N;;;;; +10956;SIDETIC LETTER N23;Lo;0;R;;;;;N;;;;; +10957;SIDETIC LETTER N24;Lo;0;R;;;;;N;;;;; +10958;SIDETIC LETTER N25;Lo;0;R;;;;;N;;;;; +10959;SIDETIC LETTER N26;Lo;0;R;;;;;N;;;;; 10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;; 10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;; 10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;; @@ -19541,6 +19629,20 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10EC2;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 10EC3;ARABIC LETTER TAH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 10EC4;ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EC5;ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW;Lm;0;AL;;;;;N;;;;; +10EC6;ARABIC LETTER THIN NOON;Lo;0;AL;;;;;N;;;;; +10EC7;ARABIC LETTER YEH WITH FOUR DOTS BELOW;Lo;0;AL;;;;;N;;;;; +10ED0;ARABIC BIBLICAL END OF VERSE;Po;0;ON;;;;;N;;;;; +10ED1;ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED2;ARABIC LIGATURE ALAYHIM AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED3;ARABIC LIGATURE ALAYHIMAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED4;ARABIC LIGATURE QADDASA ALLAAHU SIRRAH;So;0;ON;;;;;N;;;;; +10ED5;ARABIC LIGATURE QUDDISA SIRRUHUM;So;0;ON;;;;;N;;;;; +10ED6;ARABIC LIGATURE QUDDISA SIRRUHUMAA;So;0;ON;;;;;N;;;;; +10ED7;ARABIC LIGATURE QUDDISAT ASRAARUHUM;So;0;ON;;;;;N;;;;; +10ED8;ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH;So;0;ON;;;;;N;;;;; +10EFA;ARABIC DOUBLE VERTICAL BAR BELOW;Mn;220;NSM;;;;;N;;;;; +10EFB;ARABIC SMALL LOW NOON;Mn;220;NSM;;;;;N;;;;; 10EFC;ARABIC COMBINING ALEF OVERLAY;Mn;0;NSM;;;;;N;;;;; 10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;; 10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;; @@ -21521,6 +21623,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;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;;;;; +11B60;SHARADA VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; +11B61;SHARADA VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;; +11B62;SHARADA VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +11B63;SHARADA VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; +11B64;SHARADA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; +11B65;SHARADA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; +11B66;SHARADA VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +11B67;SHARADA VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 11BC0;SUNUWAR LETTER DEVI;Lo;0;L;;;;;N;;;;; 11BC1;SUNUWAR LETTER TASLA;Lo;0;L;;;;;N;;;;; 11BC2;SUNUWAR LETTER EKO;Lo;0;L;;;;;N;;;;; @@ -21868,6 +21978,60 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11DB0;TOLONG SIKI LETTER I;Lo;0;L;;;;;N;;;;; +11DB1;TOLONG SIKI LETTER E;Lo;0;L;;;;;N;;;;; +11DB2;TOLONG SIKI LETTER U;Lo;0;L;;;;;N;;;;; +11DB3;TOLONG SIKI LETTER O;Lo;0;L;;;;;N;;;;; +11DB4;TOLONG SIKI LETTER A;Lo;0;L;;;;;N;;;;; +11DB5;TOLONG SIKI LETTER AA;Lo;0;L;;;;;N;;;;; +11DB6;TOLONG SIKI LETTER P;Lo;0;L;;;;;N;;;;; +11DB7;TOLONG SIKI LETTER PH;Lo;0;L;;;;;N;;;;; +11DB8;TOLONG SIKI LETTER B;Lo;0;L;;;;;N;;;;; +11DB9;TOLONG SIKI LETTER BH;Lo;0;L;;;;;N;;;;; +11DBA;TOLONG SIKI LETTER M;Lo;0;L;;;;;N;;;;; +11DBB;TOLONG SIKI LETTER T;Lo;0;L;;;;;N;;;;; +11DBC;TOLONG SIKI LETTER TH;Lo;0;L;;;;;N;;;;; +11DBD;TOLONG SIKI LETTER D;Lo;0;L;;;;;N;;;;; +11DBE;TOLONG SIKI LETTER DH;Lo;0;L;;;;;N;;;;; +11DBF;TOLONG SIKI LETTER N;Lo;0;L;;;;;N;;;;; +11DC0;TOLONG SIKI LETTER TT;Lo;0;L;;;;;N;;;;; +11DC1;TOLONG SIKI LETTER TTH;Lo;0;L;;;;;N;;;;; +11DC2;TOLONG SIKI LETTER DD;Lo;0;L;;;;;N;;;;; +11DC3;TOLONG SIKI LETTER DDH;Lo;0;L;;;;;N;;;;; +11DC4;TOLONG SIKI LETTER NN;Lo;0;L;;;;;N;;;;; +11DC5;TOLONG SIKI LETTER C;Lo;0;L;;;;;N;;;;; +11DC6;TOLONG SIKI LETTER CH;Lo;0;L;;;;;N;;;;; +11DC7;TOLONG SIKI LETTER J;Lo;0;L;;;;;N;;;;; +11DC8;TOLONG SIKI LETTER JH;Lo;0;L;;;;;N;;;;; +11DC9;TOLONG SIKI LETTER NY;Lo;0;L;;;;;N;;;;; +11DCA;TOLONG SIKI LETTER K;Lo;0;L;;;;;N;;;;; +11DCB;TOLONG SIKI LETTER KH;Lo;0;L;;;;;N;;;;; +11DCC;TOLONG SIKI LETTER G;Lo;0;L;;;;;N;;;;; +11DCD;TOLONG SIKI LETTER GH;Lo;0;L;;;;;N;;;;; +11DCE;TOLONG SIKI LETTER NG;Lo;0;L;;;;;N;;;;; +11DCF;TOLONG SIKI LETTER Y;Lo;0;L;;;;;N;;;;; +11DD0;TOLONG SIKI LETTER R;Lo;0;L;;;;;N;;;;; +11DD1;TOLONG SIKI LETTER L;Lo;0;L;;;;;N;;;;; +11DD2;TOLONG SIKI LETTER V;Lo;0;L;;;;;N;;;;; +11DD3;TOLONG SIKI LETTER NNY;Lo;0;L;;;;;N;;;;; +11DD4;TOLONG SIKI LETTER S;Lo;0;L;;;;;N;;;;; +11DD5;TOLONG SIKI LETTER H;Lo;0;L;;;;;N;;;;; +11DD6;TOLONG SIKI LETTER X;Lo;0;L;;;;;N;;;;; +11DD7;TOLONG SIKI LETTER RR;Lo;0;L;;;;;N;;;;; +11DD8;TOLONG SIKI LETTER RRH;Lo;0;L;;;;;N;;;;; +11DD9;TOLONG SIKI SIGN SELA;Lm;0;L;;;;;N;;;;; +11DDA;TOLONG SIKI SIGN HECAKA;Lo;0;L;;;;;N;;;;; +11DDB;TOLONG SIKI UNGGA;Lo;0;L;;;;;N;;;;; +11DE0;TOLONG SIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11DE1;TOLONG SIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11DE2;TOLONG SIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11DE3;TOLONG SIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +11DE4;TOLONG SIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +11DE5;TOLONG SIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +11DE6;TOLONG SIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +11DE7;TOLONG SIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +11DE8;TOLONG SIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +11DE9;TOLONG SIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;; 11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;; 11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;; @@ -22088,8 +22252,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; 12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; 12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; -12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; -12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;1;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;1;N;;;;; 1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; 1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; 1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; @@ -22153,7 +22317,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; 12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; 12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; -12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;1;N;;;;; 1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; 1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; 1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; @@ -22582,12 +22746,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; 12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; 12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; -12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;1/2;N;;;;; 12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; 12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; 12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; 1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; -1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;2;N;;;;; 1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; 1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; 1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; @@ -22811,9 +22975,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; 12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; 1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; -1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;1;N;;;;; 1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; -1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;3;N;;;;; 1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; 1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; 12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; @@ -22953,7 +23117,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;; 12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;; -12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;; +12399;CUNEIFORM SIGN U U;Lo;0;L;;;;2;N;;;;; 12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; 12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; 12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; @@ -30124,6 +30288,56 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;; 16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;; 16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;; +16EA0;BERIA ERFE CAPITAL LETTER ARKAB;Lu;0;L;;;;;N;;;;16EBB; +16EA1;BERIA ERFE CAPITAL LETTER BASIGNA;Lu;0;L;;;;;N;;;;16EBC; +16EA2;BERIA ERFE CAPITAL LETTER DARBAI;Lu;0;L;;;;;N;;;;16EBD; +16EA3;BERIA ERFE CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;16EBE; +16EA4;BERIA ERFE CAPITAL LETTER FITKO;Lu;0;L;;;;;N;;;;16EBF; +16EA5;BERIA ERFE CAPITAL LETTER GOWAY;Lu;0;L;;;;;N;;;;16EC0; +16EA6;BERIA ERFE CAPITAL LETTER HIRDEABO;Lu;0;L;;;;;N;;;;16EC1; +16EA7;BERIA ERFE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16EC2; +16EA8;BERIA ERFE CAPITAL LETTER DJAI;Lu;0;L;;;;;N;;;;16EC3; +16EA9;BERIA ERFE CAPITAL LETTER KOBO;Lu;0;L;;;;;N;;;;16EC4; +16EAA;BERIA ERFE CAPITAL LETTER LAKKO;Lu;0;L;;;;;N;;;;16EC5; +16EAB;BERIA ERFE CAPITAL LETTER MERI;Lu;0;L;;;;;N;;;;16EC6; +16EAC;BERIA ERFE CAPITAL LETTER NINI;Lu;0;L;;;;;N;;;;16EC7; +16EAD;BERIA ERFE CAPITAL LETTER GNA;Lu;0;L;;;;;N;;;;16EC8; +16EAE;BERIA ERFE CAPITAL LETTER NGAY;Lu;0;L;;;;;N;;;;16EC9; +16EAF;BERIA ERFE CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;16ECA; +16EB0;BERIA ERFE CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;16ECB; +16EB1;BERIA ERFE CAPITAL LETTER ERIGO;Lu;0;L;;;;;N;;;;16ECC; +16EB2;BERIA ERFE CAPITAL LETTER ERIGO TAMURA;Lu;0;L;;;;;N;;;;16ECD; +16EB3;BERIA ERFE CAPITAL LETTER SERI;Lu;0;L;;;;;N;;;;16ECE; +16EB4;BERIA ERFE CAPITAL LETTER SHEP;Lu;0;L;;;;;N;;;;16ECF; +16EB5;BERIA ERFE CAPITAL LETTER TATASOUE;Lu;0;L;;;;;N;;;;16ED0; +16EB6;BERIA ERFE CAPITAL LETTER UI;Lu;0;L;;;;;N;;;;16ED1; +16EB7;BERIA ERFE CAPITAL LETTER WASSE;Lu;0;L;;;;;N;;;;16ED2; +16EB8;BERIA ERFE CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;16ED3; +16EBB;BERIA ERFE SMALL LETTER ARKAB;Ll;0;L;;;;;N;;;16EA0;;16EA0 +16EBC;BERIA ERFE SMALL LETTER BASIGNA;Ll;0;L;;;;;N;;;16EA1;;16EA1 +16EBD;BERIA ERFE SMALL LETTER DARBAI;Ll;0;L;;;;;N;;;16EA2;;16EA2 +16EBE;BERIA ERFE SMALL LETTER EH;Ll;0;L;;;;;N;;;16EA3;;16EA3 +16EBF;BERIA ERFE SMALL LETTER FITKO;Ll;0;L;;;;;N;;;16EA4;;16EA4 +16EC0;BERIA ERFE SMALL LETTER GOWAY;Ll;0;L;;;;;N;;;16EA5;;16EA5 +16EC1;BERIA ERFE SMALL LETTER HIRDEABO;Ll;0;L;;;;;N;;;16EA6;;16EA6 +16EC2;BERIA ERFE SMALL LETTER I;Ll;0;L;;;;;N;;;16EA7;;16EA7 +16EC3;BERIA ERFE SMALL LETTER DJAI;Ll;0;L;;;;;N;;;16EA8;;16EA8 +16EC4;BERIA ERFE SMALL LETTER KOBO;Ll;0;L;;;;;N;;;16EA9;;16EA9 +16EC5;BERIA ERFE SMALL LETTER LAKKO;Ll;0;L;;;;;N;;;16EAA;;16EAA +16EC6;BERIA ERFE SMALL LETTER MERI;Ll;0;L;;;;;N;;;16EAB;;16EAB +16EC7;BERIA ERFE SMALL LETTER NINI;Ll;0;L;;;;;N;;;16EAC;;16EAC +16EC8;BERIA ERFE SMALL LETTER GNA;Ll;0;L;;;;;N;;;16EAD;;16EAD +16EC9;BERIA ERFE SMALL LETTER NGAY;Ll;0;L;;;;;N;;;16EAE;;16EAE +16ECA;BERIA ERFE SMALL LETTER OI;Ll;0;L;;;;;N;;;16EAF;;16EAF +16ECB;BERIA ERFE SMALL LETTER PI;Ll;0;L;;;;;N;;;16EB0;;16EB0 +16ECC;BERIA ERFE SMALL LETTER ERIGO;Ll;0;L;;;;;N;;;16EB1;;16EB1 +16ECD;BERIA ERFE SMALL LETTER ERIGO TAMURA;Ll;0;L;;;;;N;;;16EB2;;16EB2 +16ECE;BERIA ERFE SMALL LETTER SERI;Ll;0;L;;;;;N;;;16EB3;;16EB3 +16ECF;BERIA ERFE SMALL LETTER SHEP;Ll;0;L;;;;;N;;;16EB4;;16EB4 +16ED0;BERIA ERFE SMALL LETTER TATASOUE;Ll;0;L;;;;;N;;;16EB5;;16EB5 +16ED1;BERIA ERFE SMALL LETTER UI;Ll;0;L;;;;;N;;;16EB6;;16EB6 +16ED2;BERIA ERFE SMALL LETTER WASSE;Ll;0;L;;;;;N;;;16EB7;;16EB7 +16ED3;BERIA ERFE SMALL LETTER AY;Ll;0;L;;;;;N;;;16EB8;;16EB8 16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;; 16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;; 16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;; @@ -30280,8 +30494,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;; 16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;; 16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;; +16FF2;CHINESE SMALL SIMPLIFIED ER;Lm;0;L;;;;;N;;;;; +16FF3;CHINESE SMALL TRADITIONAL ER;Lm;0;L;;;;;N;;;;; +16FF4;YANGQIN SIGN SLOW ONE BEAT;Nl;0;L;;;;1;N;;;;; +16FF5;YANGQIN SIGN SLOW THREE HALF BEATS;Nl;0;L;;;;3/2;N;;;;; +16FF6;YANGQIN SIGN SLOW TWO BEATS;Nl;0;L;;;;2;N;;;;; 17000;;Lo;0;L;;;;;N;;;;; -187F7;;Lo;0;L;;;;;N;;;;; +187FF;;Lo;0;L;;;;;N;;;;; 18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;; 18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;; 18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;; @@ -31522,7 +31741,122 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; 18CFF;KHITAN SMALL SCRIPT CHARACTER-18CFF;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; -18D08;;Lo;0;L;;;;;N;;;;; +18D1E;;Lo;0;L;;;;;N;;;;; +18D80;TANGUT COMPONENT-769;Lo;0;L;;;;;N;;;;; +18D81;TANGUT COMPONENT-770;Lo;0;L;;;;;N;;;;; +18D82;TANGUT COMPONENT-771;Lo;0;L;;;;;N;;;;; +18D83;TANGUT COMPONENT-772;Lo;0;L;;;;;N;;;;; +18D84;TANGUT COMPONENT-773;Lo;0;L;;;;;N;;;;; +18D85;TANGUT COMPONENT-774;Lo;0;L;;;;;N;;;;; +18D86;TANGUT COMPONENT-775;Lo;0;L;;;;;N;;;;; +18D87;TANGUT COMPONENT-776;Lo;0;L;;;;;N;;;;; +18D88;TANGUT COMPONENT-777;Lo;0;L;;;;;N;;;;; +18D89;TANGUT COMPONENT-778;Lo;0;L;;;;;N;;;;; +18D8A;TANGUT COMPONENT-779;Lo;0;L;;;;;N;;;;; +18D8B;TANGUT COMPONENT-780;Lo;0;L;;;;;N;;;;; +18D8C;TANGUT COMPONENT-781;Lo;0;L;;;;;N;;;;; +18D8D;TANGUT COMPONENT-782;Lo;0;L;;;;;N;;;;; +18D8E;TANGUT COMPONENT-783;Lo;0;L;;;;;N;;;;; +18D8F;TANGUT COMPONENT-784;Lo;0;L;;;;;N;;;;; +18D90;TANGUT COMPONENT-785;Lo;0;L;;;;;N;;;;; +18D91;TANGUT COMPONENT-786;Lo;0;L;;;;;N;;;;; +18D92;TANGUT COMPONENT-787;Lo;0;L;;;;;N;;;;; +18D93;TANGUT COMPONENT-788;Lo;0;L;;;;;N;;;;; +18D94;TANGUT COMPONENT-789;Lo;0;L;;;;;N;;;;; +18D95;TANGUT COMPONENT-790;Lo;0;L;;;;;N;;;;; +18D96;TANGUT COMPONENT-791;Lo;0;L;;;;;N;;;;; +18D97;TANGUT COMPONENT-792;Lo;0;L;;;;;N;;;;; +18D98;TANGUT COMPONENT-793;Lo;0;L;;;;;N;;;;; +18D99;TANGUT COMPONENT-794;Lo;0;L;;;;;N;;;;; +18D9A;TANGUT COMPONENT-795;Lo;0;L;;;;;N;;;;; +18D9B;TANGUT COMPONENT-796;Lo;0;L;;;;;N;;;;; +18D9C;TANGUT COMPONENT-797;Lo;0;L;;;;;N;;;;; +18D9D;TANGUT COMPONENT-798;Lo;0;L;;;;;N;;;;; +18D9E;TANGUT COMPONENT-799;Lo;0;L;;;;;N;;;;; +18D9F;TANGUT COMPONENT-800;Lo;0;L;;;;;N;;;;; +18DA0;TANGUT COMPONENT-801;Lo;0;L;;;;;N;;;;; +18DA1;TANGUT COMPONENT-802;Lo;0;L;;;;;N;;;;; +18DA2;TANGUT COMPONENT-803;Lo;0;L;;;;;N;;;;; +18DA3;TANGUT COMPONENT-804;Lo;0;L;;;;;N;;;;; +18DA4;TANGUT COMPONENT-805;Lo;0;L;;;;;N;;;;; +18DA5;TANGUT COMPONENT-806;Lo;0;L;;;;;N;;;;; +18DA6;TANGUT COMPONENT-807;Lo;0;L;;;;;N;;;;; +18DA7;TANGUT COMPONENT-808;Lo;0;L;;;;;N;;;;; +18DA8;TANGUT COMPONENT-809;Lo;0;L;;;;;N;;;;; +18DA9;TANGUT COMPONENT-810;Lo;0;L;;;;;N;;;;; +18DAA;TANGUT COMPONENT-811;Lo;0;L;;;;;N;;;;; +18DAB;TANGUT COMPONENT-812;Lo;0;L;;;;;N;;;;; +18DAC;TANGUT COMPONENT-813;Lo;0;L;;;;;N;;;;; +18DAD;TANGUT COMPONENT-814;Lo;0;L;;;;;N;;;;; +18DAE;TANGUT COMPONENT-815;Lo;0;L;;;;;N;;;;; +18DAF;TANGUT COMPONENT-816;Lo;0;L;;;;;N;;;;; +18DB0;TANGUT COMPONENT-817;Lo;0;L;;;;;N;;;;; +18DB1;TANGUT COMPONENT-818;Lo;0;L;;;;;N;;;;; +18DB2;TANGUT COMPONENT-819;Lo;0;L;;;;;N;;;;; +18DB3;TANGUT COMPONENT-820;Lo;0;L;;;;;N;;;;; +18DB4;TANGUT COMPONENT-821;Lo;0;L;;;;;N;;;;; +18DB5;TANGUT COMPONENT-822;Lo;0;L;;;;;N;;;;; +18DB6;TANGUT COMPONENT-823;Lo;0;L;;;;;N;;;;; +18DB7;TANGUT COMPONENT-824;Lo;0;L;;;;;N;;;;; +18DB8;TANGUT COMPONENT-825;Lo;0;L;;;;;N;;;;; +18DB9;TANGUT COMPONENT-826;Lo;0;L;;;;;N;;;;; +18DBA;TANGUT COMPONENT-827;Lo;0;L;;;;;N;;;;; +18DBB;TANGUT COMPONENT-828;Lo;0;L;;;;;N;;;;; +18DBC;TANGUT COMPONENT-829;Lo;0;L;;;;;N;;;;; +18DBD;TANGUT COMPONENT-830;Lo;0;L;;;;;N;;;;; +18DBE;TANGUT COMPONENT-831;Lo;0;L;;;;;N;;;;; +18DBF;TANGUT COMPONENT-832;Lo;0;L;;;;;N;;;;; +18DC0;TANGUT COMPONENT-833;Lo;0;L;;;;;N;;;;; +18DC1;TANGUT COMPONENT-834;Lo;0;L;;;;;N;;;;; +18DC2;TANGUT COMPONENT-835;Lo;0;L;;;;;N;;;;; +18DC3;TANGUT COMPONENT-836;Lo;0;L;;;;;N;;;;; +18DC4;TANGUT COMPONENT-837;Lo;0;L;;;;;N;;;;; +18DC5;TANGUT COMPONENT-838;Lo;0;L;;;;;N;;;;; +18DC6;TANGUT COMPONENT-839;Lo;0;L;;;;;N;;;;; +18DC7;TANGUT COMPONENT-840;Lo;0;L;;;;;N;;;;; +18DC8;TANGUT COMPONENT-841;Lo;0;L;;;;;N;;;;; +18DC9;TANGUT COMPONENT-842;Lo;0;L;;;;;N;;;;; +18DCA;TANGUT COMPONENT-843;Lo;0;L;;;;;N;;;;; +18DCB;TANGUT COMPONENT-844;Lo;0;L;;;;;N;;;;; +18DCC;TANGUT COMPONENT-845;Lo;0;L;;;;;N;;;;; +18DCD;TANGUT COMPONENT-846;Lo;0;L;;;;;N;;;;; +18DCE;TANGUT COMPONENT-847;Lo;0;L;;;;;N;;;;; +18DCF;TANGUT COMPONENT-848;Lo;0;L;;;;;N;;;;; +18DD0;TANGUT COMPONENT-849;Lo;0;L;;;;;N;;;;; +18DD1;TANGUT COMPONENT-850;Lo;0;L;;;;;N;;;;; +18DD2;TANGUT COMPONENT-851;Lo;0;L;;;;;N;;;;; +18DD3;TANGUT COMPONENT-852;Lo;0;L;;;;;N;;;;; +18DD4;TANGUT COMPONENT-853;Lo;0;L;;;;;N;;;;; +18DD5;TANGUT COMPONENT-854;Lo;0;L;;;;;N;;;;; +18DD6;TANGUT COMPONENT-855;Lo;0;L;;;;;N;;;;; +18DD7;TANGUT COMPONENT-856;Lo;0;L;;;;;N;;;;; +18DD8;TANGUT COMPONENT-857;Lo;0;L;;;;;N;;;;; +18DD9;TANGUT COMPONENT-858;Lo;0;L;;;;;N;;;;; +18DDA;TANGUT COMPONENT-859;Lo;0;L;;;;;N;;;;; +18DDB;TANGUT COMPONENT-860;Lo;0;L;;;;;N;;;;; +18DDC;TANGUT COMPONENT-861;Lo;0;L;;;;;N;;;;; +18DDD;TANGUT COMPONENT-862;Lo;0;L;;;;;N;;;;; +18DDE;TANGUT COMPONENT-863;Lo;0;L;;;;;N;;;;; +18DDF;TANGUT COMPONENT-864;Lo;0;L;;;;;N;;;;; +18DE0;TANGUT COMPONENT-865;Lo;0;L;;;;;N;;;;; +18DE1;TANGUT COMPONENT-866;Lo;0;L;;;;;N;;;;; +18DE2;TANGUT COMPONENT-867;Lo;0;L;;;;;N;;;;; +18DE3;TANGUT COMPONENT-868;Lo;0;L;;;;;N;;;;; +18DE4;TANGUT COMPONENT-869;Lo;0;L;;;;;N;;;;; +18DE5;TANGUT COMPONENT-870;Lo;0;L;;;;;N;;;;; +18DE6;TANGUT COMPONENT-871;Lo;0;L;;;;;N;;;;; +18DE7;TANGUT COMPONENT-872;Lo;0;L;;;;;N;;;;; +18DE8;TANGUT COMPONENT-873;Lo;0;L;;;;;N;;;;; +18DE9;TANGUT COMPONENT-874;Lo;0;L;;;;;N;;;;; +18DEA;TANGUT COMPONENT-875;Lo;0;L;;;;;N;;;;; +18DEB;TANGUT COMPONENT-876;Lo;0;L;;;;;N;;;;; +18DEC;TANGUT COMPONENT-877;Lo;0;L;;;;;N;;;;; +18DED;TANGUT COMPONENT-878;Lo;0;L;;;;;N;;;;; +18DEE;TANGUT COMPONENT-879;Lo;0;L;;;;;N;;;;; +18DEF;TANGUT COMPONENT-880;Lo;0;L;;;;;N;;;;; +18DF0;TANGUT COMPONENT-881;Lo;0;L;;;;;N;;;;; +18DF1;TANGUT COMPONENT-882;Lo;0;L;;;;;N;;;;; +18DF2;TANGUT COMPONENT-883;Lo;0;L;;;;;N;;;;; 1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; 1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; 1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; @@ -32629,6 +32963,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1CCF7;OUTLINED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1CCF8;OUTLINED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1CCF9;OUTLINED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1CCFA;SNAKE SYMBOL;So;0;ON;;;;;N;;;;; +1CCFB;FLYING SAUCER SYMBOL;So;0;ON;;;;;N;;;;; +1CCFC;NOSE SYMBOL;So;0;ON;;;;;N;;;;; 1CD00;BLOCK OCTANT-3;So;0;ON;;;;;N;;;;; 1CD01;BLOCK OCTANT-23;So;0;ON;;;;;N;;;;; 1CD02;BLOCK OCTANT-123;So;0;ON;;;;;N;;;;; @@ -33065,6 +33402,46 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1CEB1;KEYHOLE;So;0;ON;;;;;N;;;;; 1CEB2;OLD PERSONAL COMPUTER WITH MONITOR IN PORTRAIT ORIENTATION;So;0;ON;;;;;N;;;;; 1CEB3;BLACK RIGHT TRIANGLE CARET;So;0;ON;;;;;N;;;;; +1CEBA;FRAGILE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBB;OFFICE BUILDING SYMBOL;So;0;ON;;;;;N;;;;; +1CEBC;TREE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBD;APPLE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBE;CHERRY SYMBOL;So;0;ON;;;;;N;;;;; +1CEBF;STRAWBERRY SYMBOL;So;0;ON;;;;;N;;;;; +1CEC0;HEBE;So;0;ON;;;;;N;;;;; +1CEC1;IRIS;So;0;ON;;;;;N;;;;; +1CEC2;FLORA;So;0;ON;;;;;N;;;;; +1CEC3;METIS;So;0;ON;;;;;N;;;;; +1CEC4;PARTHENOPE;So;0;ON;;;;;N;;;;; +1CEC5;VICTORIA;So;0;ON;;;;;N;;;;; +1CEC6;EGERIA;So;0;ON;;;;;N;;;;; +1CEC7;IRENE;So;0;ON;;;;;N;;;;; +1CEC8;EUNOMIA;So;0;ON;;;;;N;;;;; +1CEC9;PSYCHE;So;0;ON;;;;;N;;;;; +1CECA;THETIS;So;0;ON;;;;;N;;;;; +1CECB;MELPOMENE;So;0;ON;;;;;N;;;;; +1CECC;FORTUNA;So;0;ON;;;;;N;;;;; +1CECD;ASTRONOMICAL SYMBOL FOR ASTEROID PROSERPINA;So;0;ON;;;;;N;;;;; +1CECE;BELLONA;So;0;ON;;;;;N;;;;; +1CECF;AMPHITRITE;So;0;ON;;;;;N;;;;; +1CED0;LEUKOTHEA;So;0;ON;;;;;N;;;;; +1CEE0;GEOMANTIC FIGURE POPULUS;So;0;ON;;;;;N;;;;; +1CEE1;GEOMANTIC FIGURE TRISTITIA;So;0;ON;;;;;N;;;;; +1CEE2;GEOMANTIC FIGURE ALBUS;So;0;ON;;;;;N;;;;; +1CEE3;GEOMANTIC FIGURE FORTUNA MAJOR;So;0;ON;;;;;N;;;;; +1CEE4;GEOMANTIC FIGURE RUBEUS;So;0;ON;;;;;N;;;;; +1CEE5;GEOMANTIC FIGURE ACQUISITIO;So;0;ON;;;;;N;;;;; +1CEE6;GEOMANTIC FIGURE CONJUNCTIO;So;0;ON;;;;;N;;;;; +1CEE7;GEOMANTIC FIGURE CAPUT DRACONIS;So;0;ON;;;;;N;;;;; +1CEE8;GEOMANTIC FIGURE LAETITIA;So;0;ON;;;;;N;;;;; +1CEE9;GEOMANTIC FIGURE CARCER;So;0;ON;;;;;N;;;;; +1CEEA;GEOMANTIC FIGURE AMISSIO;So;0;ON;;;;;N;;;;; +1CEEB;GEOMANTIC FIGURE PUELLA;So;0;ON;;;;;N;;;;; +1CEEC;GEOMANTIC FIGURE FORTUNA MINOR;So;0;ON;;;;;N;;;;; +1CEED;GEOMANTIC FIGURE PUER;So;0;ON;;;;;N;;;;; +1CEEE;GEOMANTIC FIGURE CAUDA DRACONIS;So;0;ON;;;;;N;;;;; +1CEEF;GEOMANTIC FIGURE VIA;So;0;ON;;;;;N;;;;; +1CEF0;MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; 1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; @@ -36004,6 +36381,61 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E5F9;OL ONAL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E5FA;OL ONAL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E5FF;OL ONAL ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +1E6C0;TAI YO LETTER LOW KO;Lo;0;L;;;;;N;;;;; +1E6C1;TAI YO LETTER HIGH KO;Lo;0;L;;;;;N;;;;; +1E6C2;TAI YO LETTER LOW KHO;Lo;0;L;;;;;N;;;;; +1E6C3;TAI YO LETTER HIGH KHO;Lo;0;L;;;;;N;;;;; +1E6C4;TAI YO LETTER GO;Lo;0;L;;;;;N;;;;; +1E6C5;TAI YO LETTER NGO;Lo;0;L;;;;;N;;;;; +1E6C6;TAI YO LETTER CO;Lo;0;L;;;;;N;;;;; +1E6C7;TAI YO LETTER LOW XO;Lo;0;L;;;;;N;;;;; +1E6C8;TAI YO LETTER HIGH XO;Lo;0;L;;;;;N;;;;; +1E6C9;TAI YO LETTER LOW NYO;Lo;0;L;;;;;N;;;;; +1E6CA;TAI YO LETTER HIGH NYO;Lo;0;L;;;;;N;;;;; +1E6CB;TAI YO LETTER DO;Lo;0;L;;;;;N;;;;; +1E6CC;TAI YO LETTER LOW TO;Lo;0;L;;;;;N;;;;; +1E6CD;TAI YO LETTER HIGH TO;Lo;0;L;;;;;N;;;;; +1E6CE;TAI YO LETTER THO;Lo;0;L;;;;;N;;;;; +1E6CF;TAI YO LETTER NO;Lo;0;L;;;;;N;;;;; +1E6D0;TAI YO LETTER BO;Lo;0;L;;;;;N;;;;; +1E6D1;TAI YO LETTER LOW PO;Lo;0;L;;;;;N;;;;; +1E6D2;TAI YO LETTER HIGH PO;Lo;0;L;;;;;N;;;;; +1E6D3;TAI YO LETTER PHO;Lo;0;L;;;;;N;;;;; +1E6D4;TAI YO LETTER LOW FO;Lo;0;L;;;;;N;;;;; +1E6D5;TAI YO LETTER HIGH FO;Lo;0;L;;;;;N;;;;; +1E6D6;TAI YO LETTER MO;Lo;0;L;;;;;N;;;;; +1E6D7;TAI YO LETTER YO;Lo;0;L;;;;;N;;;;; +1E6D8;TAI YO LETTER LO;Lo;0;L;;;;;N;;;;; +1E6D9;TAI YO LETTER VO;Lo;0;L;;;;;N;;;;; +1E6DA;TAI YO LETTER LOW HO;Lo;0;L;;;;;N;;;;; +1E6DB;TAI YO LETTER HIGH HO;Lo;0;L;;;;;N;;;;; +1E6DC;TAI YO LETTER QO;Lo;0;L;;;;;N;;;;; +1E6DD;TAI YO LETTER LOW KVO;Lo;0;L;;;;;N;;;;; +1E6DE;TAI YO LETTER HIGH KVO;Lo;0;L;;;;;N;;;;; +1E6E0;TAI YO LETTER AA;Lo;0;L;;;;;N;;;;; +1E6E1;TAI YO LETTER I;Lo;0;L;;;;;N;;;;; +1E6E2;TAI YO LETTER UE;Lo;0;L;;;;;N;;;;; +1E6E3;TAI YO SIGN UE;Mn;230;NSM;;;;;N;;;;; +1E6E4;TAI YO LETTER U;Lo;0;L;;;;;N;;;;; +1E6E5;TAI YO LETTER AE;Lo;0;L;;;;;N;;;;; +1E6E6;TAI YO SIGN AU;Mn;230;NSM;;;;;N;;;;; +1E6E7;TAI YO LETTER O;Lo;0;L;;;;;N;;;;; +1E6E8;TAI YO LETTER E;Lo;0;L;;;;;N;;;;; +1E6E9;TAI YO LETTER IA;Lo;0;L;;;;;N;;;;; +1E6EA;TAI YO LETTER UEA;Lo;0;L;;;;;N;;;;; +1E6EB;TAI YO LETTER UA;Lo;0;L;;;;;N;;;;; +1E6EC;TAI YO LETTER OO;Lo;0;L;;;;;N;;;;; +1E6ED;TAI YO LETTER AUE;Lo;0;L;;;;;N;;;;; +1E6EE;TAI YO SIGN AY;Mn;230;NSM;;;;;N;;;;; +1E6EF;TAI YO SIGN ANG;Mn;230;NSM;;;;;N;;;;; +1E6F0;TAI YO LETTER AN;Lo;0;L;;;;;N;;;;; +1E6F1;TAI YO LETTER AM;Lo;0;L;;;;;N;;;;; +1E6F2;TAI YO LETTER AK;Lo;0;L;;;;;N;;;;; +1E6F3;TAI YO LETTER AT;Lo;0;L;;;;;N;;;;; +1E6F4;TAI YO LETTER AP;Lo;0;L;;;;;N;;;;; +1E6F5;TAI YO SIGN OM;Mn;230;NSM;;;;;N;;;;; +1E6FE;TAI YO SYMBOL MUEANG;Lo;0;L;;;;;N;;;;; +1E6FF;TAI YO XAM LAI;Lm;0;L;;;;;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;;;;; @@ -38079,6 +38511,7 @@ 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;;;;; +1F6D8;LANDSLIDE;So;0;ON;;;;;N;;;;; 1F6DC;WIRELESS;So;0;ON;;;;;N;;;;; 1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; 1F6DE;WHEEL;So;0;ON;;;;;N;;;;; @@ -38228,6 +38661,10 @@ FFFD;REPLACEMENT CHARACTER;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;;;;; +1F777;VESTA FORM TWO;So;0;ON;;;;;N;;;;; +1F778;ASTRAEA FORM TWO;So;0;ON;;;;;N;;;;; +1F779;HYGIEA FORM TWO;So;0;ON;;;;;N;;;;; +1F77A;PARTHENOPE FORM TWO;So;0;ON;;;;;N;;;;; 1F77B;HAUMEA;So;0;ON;;;;;N;;;;; 1F77C;MAKEMAKE;So;0;ON;;;;;N;;;;; 1F77D;GONGGONG;So;0;ON;;;;;N;;;;; @@ -38498,6 +38935,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F8BB;SOUTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;; 1F8C0;LEFTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 1F8C1;RIGHTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8D0;LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +1F8D1;LONG RIGHTWARDS HARPOON OVER LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D2;LONG RIGHTWARDS HARPOON ABOVE SHORT LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D3;SHORT RIGHTWARDS HARPOON ABOVE LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D4;LONG LEFTWARDS HARPOON ABOVE SHORT RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D5;SHORT LEFTWARDS HARPOON ABOVE LONG RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D6;LONG RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +1F8D7;LONG RIGHTWARDS ARROW WITH DOUBLE SLASH;Sm;0;ON;;;;;N;;;;; +1F8D8;LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE;Sm;0;ON;;;;;N;;;;; 1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;; @@ -38838,6 +39284,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; 1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; 1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; +1FA54;WHITE CHESS FERZ;So;0;ON;;;;;N;;;;; +1FA55;WHITE CHESS ALFIL;So;0;ON;;;;;N;;;;; +1FA56;BLACK CHESS FERZ;So;0;ON;;;;;N;;;;; +1FA57;BLACK CHESS ALFIL;So;0;ON;;;;;N;;;;; 1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;; 1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;; 1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;; @@ -38875,6 +39325,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA87;MARACAS;So;0;ON;;;;;N;;;;; 1FA88;FLUTE;So;0;ON;;;;;N;;;;; 1FA89;HARP;So;0;ON;;;;;N;;;;; +1FA8A;TROMBONE;So;0;ON;;;;;N;;;;; +1FA8E;TREASURE CHEST;So;0;ON;;;;;N;;;;; 1FA8F;SHOVEL;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; @@ -38931,6 +39383,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; 1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; 1FAC6;FINGERPRINT;So;0;ON;;;;;N;;;;; +1FAC8;HAIRY CREATURE;So;0;ON;;;;;N;;;;; +1FACD;ORCA;So;0;ON;;;;;N;;;;; 1FACE;MOOSE;So;0;ON;;;;;N;;;;; 1FACF;DONKEY;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; @@ -38957,6 +39411,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; 1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;; 1FAE9;FACE WITH BAGS UNDER EYES;So;0;ON;;;;;N;;;;; +1FAEA;DISTORTED FACE;So;0;ON;;;;;N;;;;; +1FAEF;FIGHT CLOUD;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;;;;; @@ -39215,14 +39671,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1FBFA;ALARM BELL SYMBOL;So;0;ON;;;;;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; 2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; -2B739;;Lo;0;L;;;;;N;;;;; +2B73F;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; -2CEA1;;Lo;0;L;;;;;N;;;;; +2CEAD;;Lo;0;L;;;;;N;;;;; 2CEB0;;Lo;0;L;;;;;N;;;;; 2EBE0;;Lo;0;L;;;;;N;;;;; 2EBF0;;Lo;0;L;;;;;N;;;;; @@ -39773,6 +40230,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 3134A;;Lo;0;L;;;;;N;;;;; 31350;;Lo;0;L;;;;;N;;;;; 323AF;;Lo;0;L;;;;;N;;;;; +323B0;;Lo;0;L;;;;;N;;;;; +33479;;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;;;;; diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk index 5f84ead1920..3d7041c4ce4 100755 --- a/admin/unidata/blocks.awk +++ b/admin/unidata/blocks.awk @@ -56,6 +56,7 @@ BEGIN { alias["box drawing"] = "symbol" alias["block elements"] = "symbol" alias["miscellaneous symbols"] = "symbol" + alias["miscellaneous symbols supplement"] = "symbol" alias["symbols for legacy computing"] = "symbol" alias["symbols for legacy computing supplement"] = "symbol" alias["cjk strokes"] = "cjk-misc" diff --git a/admin/unidata/confusables.txt b/admin/unidata/confusables.txt index 5e056ed5a35..0642923cbf9 100644 --- a/admin/unidata/confusables.txt +++ b/admin/unidata/confusables.txt @@ -1,11 +1,11 @@ # confusables.txt -# Date: 2023-08-11, 17:46:40 GMT -# © 2023 Unicode®, Inc. +# Date: 2025-07-22, 05:49:37 GMT +# © 2025 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 and license, see https://www.unicode.org/terms_of_use.html # # Unicode Security Mechanisms for UTS #39 -# Version: 15.1.0 +# Version: 17.0.0 # # For documentation and usage, see https://www.unicode.org/reports/tr39 # @@ -44,6 +44,8 @@ A67C ; 0306 ; MA # ( ꙼ → ̆ ) COMBINING CYRILLIC KAVYKA → COMBINING BREVE 0658 ; 0306 ; MA # ( ٘ → ̆ ) ARABIC MARK NOON GHUNNA → COMBINING BREVE # 065A ; 0306 ; MA # ( ٚ → ̆ ) ARABIC VOWEL SIGN SMALL V ABOVE → COMBINING BREVE # →̌→ 036E ; 0306 ; MA # ( ͮ → ̆ ) COMBINING LATIN SMALL LETTER V → COMBINING BREVE # →̌→ +0945 ; 0306 ; MA # ( ॅ → ̆ ) DEVANAGARI VOWEL SIGN CANDRA E → COMBINING BREVE # +11B66 ; 0306 ; MA # ( 𑭦 → ̆ ) SHARADA VOWEL SIGN CANDRA E → COMBINING BREVE # →ॅ→ 06E8 ; 0306 0307 ; MA # ( ۨ → ̆̇ ) ARABIC SMALL HIGH NOON → COMBINING BREVE, COMBINING DOT ABOVE # →̐→ 0310 ; 0306 0307 ; MA # ( ̐ → ̆̇ ) COMBINING CANDRABINDU → COMBINING BREVE, COMBINING DOT ABOVE # @@ -112,6 +114,9 @@ A6F0 ; 0302 ; MA # ( ꛰ → ̂ ) BAMUM COMBINING MARK KOQNDON → COMBINING CIR 0659 ; 0304 ; MA # ( ٙ → ̄ ) ARABIC ZWARAKAY → COMBINING MACRON # 07EB ; 0304 ; MA # ( ߫ → ̄ ) NKO COMBINING SHORT HIGH TONE → COMBINING MACRON # A6F1 ; 0304 ; MA # ( ꛱ → ̄ ) BAMUM COMBINING MARK TUKWENTIS → COMBINING MACRON # +1AE2 ; 0304 ; MA # ( ᫢ → ̄ ) COMBINING MINUS SIGN ABOVE → COMBINING MACRON # + +1AE8 ; 0304 0304 ; MA # ( ᫨ → ̄̄ ) COMBINING EQUALS SIGN ABOVE → COMBINING MACRON, COMBINING MACRON # 1CDA ; 030E ; MA # ( ᳚ → ̎ ) VEDIC TONE DOUBLE SVARITA → COMBINING DOUBLE VERTICAL LINE ABOVE # @@ -123,6 +128,10 @@ A6F1 ; 0304 ; MA # ( ꛱ → ̄ ) BAMUM COMBINING MARK TUKWENTIS → COMBINING M 0900 ; 0352 ; MA # ( ऀ → ͒ ) DEVANAGARI SIGN INVERTED CANDRABINDU → COMBINING FERMATA # +1AD9 ; 1AC6 ; MA # ( ᫙ → ᫆ ) COMBINING SHARP SIGN → COMBINING NUMBER SIGN ABOVE # + +1E6EE ; 1AC8 ; MA # ( 𞛮 → ᫈ ) TAI YO SIGN AY → COMBINING PLUS SIGN ABOVE # + 1CED ; 0316 ; MA # ( ᳭ → ̖ ) VEDIC SIGN TIRYAK → COMBINING GRAVE ACCENT BELOW # 1CDC ; 0329 ; MA # ( ᳜ → ̩ ) VEDIC TONE KATHAKA ANUDATTA → COMBINING VERTICAL LINE BELOW # @@ -260,6 +269,7 @@ FE58 ; 002D ; MA #* ( ﹘ → - ) SMALL EM DASH → HYPHEN-MINUS # 02D7 ; 002D ; MA #* ( ˗ → - ) MODIFIER LETTER MINUS SIGN → HYPHEN-MINUS # 2212 ; 002D ; MA #* ( − → - ) MINUS SIGN → HYPHEN-MINUS # 2796 ; 002D ; MA #* ( ➖ → - ) HEAVY MINUS SIGN → HYPHEN-MINUS # →−→ +2CBB ; 002D ; MA # ( ⲻ → - ) COPTIC SMALL LETTER DIALECT-P NI → HYPHEN-MINUS # →−→ 2CBA ; 002D ; MA # ( Ⲻ → - ) COPTIC CAPITAL LETTER DIALECT-P NI → HYPHEN-MINUS # →‒→ 2A29 ; 002D 0313 ; MA #* ( ⨩ → -̓ ) MINUS SIGN WITH COMMA ABOVE → HYPHEN-MINUS, COMBINING COMMA ABOVE # →−̓→ @@ -268,6 +278,8 @@ FE58 ; 002D ; MA #* ( ﹘ → - ) SMALL EM DASH → HYPHEN-MINUS # FB29 ; 002D 0307 ; MA #* ( ﬩ → -̇ ) HEBREW LETTER ALTERNATIVE PLUS SIGN → HYPHEN-MINUS, COMBINING DOT ABOVE # →∸→→−̇→ 2238 ; 002D 0307 ; MA #* ( ∸ → -̇ ) DOT MINUS → HYPHEN-MINUS, COMBINING DOT ABOVE # →−̇→ +2CB3 ; 002D 0307 ; MA # ( ⲳ → -̇ ) COPTIC SMALL LETTER DIALECT-P ALEF → HYPHEN-MINUS, COMBINING DOT ABOVE # →﬩→→∸→→−̇→ +2CB2 ; 002D 0307 ; MA # ( Ⲳ → -̇ ) COPTIC CAPITAL LETTER DIALECT-P ALEF → HYPHEN-MINUS, COMBINING DOT ABOVE # →﬩→→∸→→−̇→ 2A2A ; 002D 0323 ; MA #* ( ⨪ → -̣ ) MINUS SIGN WITH DOT BELOW → HYPHEN-MINUS, COMBINING DOT BELOW # →−̣→ @@ -305,6 +317,7 @@ A789 ; 003A ; MA #* ( ꞉ → : ) MODIFIER LETTER COLON → COLON # 2236 ; 003A ; MA #* ( ∶ → : ) RATIO → COLON # 02D0 ; 003A ; MA # ( ː → : ) MODIFIER LETTER TRIANGULAR COLON → COLON # A4FD ; 003A ; MA # ( ꓽ → : ) LISU LETTER TONE MYA JEU → COLON # +11DD9 ; 003A ; MA # ( 𑷙 → : ) TOLONG SIKI SIGN SELA → COLON # 2A74 ; 003A 003A 003D ; MA #* ( ⩴ → ::= ) DOUBLE COLON EQUAL → COLON, COLON, EQUALS SIGN # @@ -577,10 +590,10 @@ FF07 ; 0027 ; MA #* ( ' → ' ) FULLWIDTH APOSTROPHE → APOSTROPHE # →’ 2018 ; 0027 ; MA #* ( ‘ → ' ) LEFT SINGLE QUOTATION MARK → APOSTROPHE # 2019 ; 0027 ; MA #* ( ’ → ' ) RIGHT SINGLE QUOTATION MARK → APOSTROPHE # 201B ; 0027 ; MA #* ( ‛ → ' ) SINGLE HIGH-REVERSED-9 QUOTATION MARK → APOSTROPHE # →′→ +05F3 ; 0027 ; MA #* ( ‎׳‎ → ' ) HEBREW PUNCTUATION GERESH → APOSTROPHE # 2032 ; 0027 ; MA #* ( ′ → ' ) PRIME → APOSTROPHE # 2035 ; 0027 ; MA #* ( ‵ → ' ) REVERSED PRIME → APOSTROPHE # →ʽ→→‘→ 055A ; 0027 ; MA #* ( ՚ → ' ) ARMENIAN APOSTROPHE → APOSTROPHE # →’→ -05F3 ; 0027 ; MA #* ( ‎׳‎ → ' ) HEBREW PUNCTUATION GERESH → APOSTROPHE # 0060 ; 0027 ; MA #* ( ` → ' ) GRAVE ACCENT → APOSTROPHE # →ˋ→→`→→‘→ 1FEF ; 0027 ; MA #* ( ` → ' ) GREEK VARIA → APOSTROPHE # →ˋ→→`→→‘→ FF40 ; 0027 ; MA #* ( ` → ' ) FULLWIDTH GRAVE ACCENT → APOSTROPHE # →‘→ @@ -593,7 +606,7 @@ FF40 ; 0027 ; MA #* ( ` → ' ) FULLWIDTH GRAVE ACCENT → APOSTROPHE # →‘ 02B9 ; 0027 ; MA # ( ʹ → ' ) MODIFIER LETTER PRIME → APOSTROPHE # 0374 ; 0027 ; MA # ( ʹ → ' ) GREEK NUMERAL SIGN → APOSTROPHE # →′→ 02C8 ; 0027 ; MA # ( ˈ → ' ) MODIFIER LETTER VERTICAL LINE → APOSTROPHE # -02CA ; 0027 ; MA # ( ˊ → ' ) MODIFIER LETTER ACUTE ACCENT → APOSTROPHE # →ʹ→→′→ +02CA ; 0027 ; MA # ( ˊ → ' ) MODIFIER LETTER ACUTE ACCENT → APOSTROPHE # →΄→→ʹ→ 02CB ; 0027 ; MA # ( ˋ → ' ) MODIFIER LETTER GRAVE ACCENT → APOSTROPHE # →`→→‘→ 02F4 ; 0027 ; MA #* ( ˴ → ' ) MODIFIER LETTER MIDDLE GRAVE ACCENT → APOSTROPHE # →ˋ→→`→→‘→ 02BB ; 0027 ; MA # ( ʻ → ' ) MODIFIER LETTER TURNED COMMA → APOSTROPHE # →‘→ @@ -615,10 +628,10 @@ FF02 ; 0027 0027 ; MA #* ( " → '' ) FULLWIDTH QUOTATION MARK → APOSTROPHE, 201C ; 0027 0027 ; MA #* ( “ → '' ) LEFT DOUBLE QUOTATION MARK → APOSTROPHE, APOSTROPHE # →"→ 201D ; 0027 0027 ; MA #* ( ” → '' ) RIGHT DOUBLE QUOTATION MARK → APOSTROPHE, APOSTROPHE # →"→ 201F ; 0027 0027 ; MA #* ( ‟ → '' ) DOUBLE HIGH-REVERSED-9 QUOTATION MARK → APOSTROPHE, APOSTROPHE # →“→→"→ +05F4 ; 0027 0027 ; MA #* ( ‎״‎ → '' ) HEBREW PUNCTUATION GERSHAYIM → APOSTROPHE, APOSTROPHE # →"→ 2033 ; 0027 0027 ; MA #* ( ″ → '' ) DOUBLE PRIME → APOSTROPHE, APOSTROPHE # →"→ 2036 ; 0027 0027 ; MA #* ( ‶ → '' ) REVERSED DOUBLE PRIME → APOSTROPHE, APOSTROPHE # →‵‵→ 3003 ; 0027 0027 ; MA #* ( 〃 → '' ) DITTO MARK → APOSTROPHE, APOSTROPHE # →″→→"→ -05F4 ; 0027 0027 ; MA #* ( ‎״‎ → '' ) HEBREW PUNCTUATION GERSHAYIM → APOSTROPHE, APOSTROPHE # →"→ 02DD ; 0027 0027 ; MA #* ( ˝ → '' ) DOUBLE ACUTE ACCENT → APOSTROPHE, APOSTROPHE # →"→ 02BA ; 0027 0027 ; MA # ( ʺ → '' ) MODIFIER LETTER DOUBLE PRIME → APOSTROPHE, APOSTROPHE # →"→ 02F6 ; 0027 0027 ; MA #* ( ˶ → '' ) MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT → APOSTROPHE, APOSTROPHE # →˝→→"→ @@ -990,6 +1003,7 @@ FF3E ; FE3F ; MA #* ( ^ → ︿ ) FULLWIDTH CIRCUMFLEX ACCENT → PRESENTATION 1D23A ; 002F ; MA #* ( 𝈺 → / ) GREEK INSTRUMENTAL NOTATION SYMBOL-47 → SOLIDUS # 31D3 ; 002F ; MA #* ( ㇓ → / ) CJK STROKE SP → SOLIDUS # →⼃→ 3033 ; 002F ; MA # ( 〳 → / ) VERTICAL KANA REPEAT MARK UPPER HALF → SOLIDUS # +2CC7 ; 002F ; MA # ( ⳇ → / ) COPTIC SMALL LETTER OLD COPTIC ESH → SOLIDUS # 2CC6 ; 002F ; MA # ( Ⳇ → / ) COPTIC CAPITAL LETTER OLD COPTIC ESH → SOLIDUS # 30CE ; 002F ; MA # ( ノ → / ) KATAKANA LETTER NO → SOLIDUS # →⼃→ 4E3F ; 002F ; MA # ( 丿 → / ) CJK UNIFIED IDEOGRAPH-4E3F → SOLIDUS # →⼃→ @@ -1071,7 +1085,8 @@ A714 ; 02EB ; MA #* ( ꜔ → ˫ ) MODIFIER LETTER MID LEFT-STEM TONE BAR → MO 25CB ; 00B0 ; MA #* ( ○ → ° ) WHITE CIRCLE → DEGREE SIGN # →◦→→∘→ 25E6 ; 00B0 ; MA #* ( ◦ → ° ) WHITE BULLET → DEGREE SIGN # →∘→ -235C ; 00B0 0332 ; MA #* ( ⍜ → °̲ ) APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR → DEGREE SIGN, COMBINING LOW LINE # →○̲→→∘̲→ +235C ; 00B0 0332 ; MA #* ( ⍜ → °̲ ) APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR → DEGREE SIGN, COMBINING LOW LINE # →○̲→ +10ED0 ; 00B0 0332 ; MA #* ( 𐻐 → °̲ ) ARABIC BIBLICAL END OF VERSE → DEGREE SIGN, COMBINING LOW LINE # →⍜→→○̲→ 2364 ; 00B0 0308 ; MA #* ( ⍤ → °̈ ) APL FUNCTIONAL SYMBOL JOT DIAERESIS → DEGREE SIGN, COMBINING DIAERESIS # →◦̈→→∘̈→ @@ -1142,6 +1157,7 @@ A714 ; 02EB ; MA #* ( ꜔ → ˫ ) MODIFIER LETTER MID LEFT-STEM TONE BAR → MO 16ED ; 002B ; MA #* ( ᛭ → + ) RUNIC CROSS PUNCTUATION → PLUS SIGN # 2795 ; 002B ; MA #* ( ➕ → + ) HEAVY PLUS SIGN → PLUS SIGN # 1029B ; 002B ; MA # ( 𐊛 → + ) LYCIAN LETTER H → PLUS SIGN # +1E6E9 ; 002B ; MA # ( 𞛩 → + ) TAI YO LETTER IA → PLUS SIGN # 2A23 ; 002B 0302 ; MA #* ( ⨣ → +̂ ) PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE → PLUS SIGN, COMBINING CIRCUMFLEX ACCENT # @@ -1167,6 +1183,7 @@ A714 ; 02EB ; MA #* ( ꜔ → ˫ ) MODIFIER LETTER MID LEFT-STEM TONE BAR → MO 16B2 ; 003C ; MA # ( ᚲ → < ) RUNIC LETTER KAUNA → LESS-THAN SIGN # 22D6 ; 003C 00B7 ; MA #* ( ⋖ → <· ) LESS-THAN WITH DOT → LESS-THAN SIGN, MIDDLE DOT # →ᑅ→→ᐸᐧ→ +2CB5 ; 003C 00B7 ; MA # ( ⲵ → <· ) COPTIC SMALL LETTER OLD COPTIC AIN → LESS-THAN SIGN, MIDDLE DOT # →⋖→→ᑅ→→ᐸᐧ→ 2CB4 ; 003C 00B7 ; MA # ( Ⲵ → <· ) COPTIC CAPITAL LETTER OLD COPTIC AIN → LESS-THAN SIGN, MIDDLE DOT # →ᑅ→→ᐸᐧ→ 1445 ; 003C 00B7 ; MA # ( ᑅ → <· ) CANADIAN SYLLABICS WEST-CREE PWA → LESS-THAN SIGN, MIDDLE DOT # →ᐸᐧ→ @@ -1189,6 +1206,8 @@ A4FF ; 003D ; MA #* ( ꓿ → = ) LISU PUNCTUATION FULL STOP → EQUALS SIGN # 2251 ; 003D 0307 0323 ; MA #* ( ≑ → =̣̇ ) GEOMETRICALLY EQUAL TO → EQUALS SIGN, COMBINING DOT ABOVE, COMBINING DOT BELOW # →≐̣→ +2B96 ; 003D 1AB2 ; MA #* ( ⮖ → =᪲ ) EQUALS SIGN WITH INFINITY ABOVE → EQUALS SIGN, COMBINING INFINITY # + 2A6E ; 003D 20F0 ; MA #* ( ⩮ → =⃰ ) EQUALS WITH ASTERISK → EQUALS SIGN, COMBINING ASTERISK ABOVE # 2A75 ; 003D 003D ; MA #* ( ⩵ → == ) TWO CONSECUTIVE EQUALS SIGNS → EQUALS SIGN, EQUALS SIGN # @@ -1245,6 +1264,7 @@ A4FF ; 003D ; MA #* ( ꓿ → = ) LISU PUNCTUATION FULL STOP → EQUALS SIGN # 1F75E ; 224F ; MA #* ( 🝞 → ≏ ) ALCHEMICAL SYMBOL FOR SUBLIMATION → DIFFERENCE BETWEEN # →♎→ 2263 ; 2261 ; MA #* ( ≣ → ≡ ) STRICTLY EQUIVALENT TO → IDENTICAL TO # +2CB7 ; 2261 ; MA # ( ⲷ → ≡ ) COPTIC SMALL LETTER CRYPTOGRAMMIC EIE → IDENTICAL TO # 2A03 ; 228D ; MA #* ( ⨃ → ⊍ ) N-ARY UNION OPERATOR WITH DOT → MULTISET MULTIPLICATION # @@ -1352,8 +1372,6 @@ FFED ; 25AA ; MA #* ( ■ → ▪ ) HALFWIDTH BLACK SQUARE → BLACK SMALL SQUAR 2A3E ; 2A1F ; MA #* ( ⨾ → ⨟ ) Z NOTATION RELATIONAL COMPOSITION → Z NOTATION SCHEMA COMPOSITION # -101A0 ; 2CE8 ; MA #* ( 𐆠 → ⳨ ) GREEK SYMBOL TAU RHO → COPTIC SYMBOL TAU RO # - 2669 ; 1D158 1D165 ; MA #* ( ♩ → 𝅘𝅥 ) QUARTER NOTE → MUSICAL SYMBOL NOTEHEAD BLACK, MUSICAL SYMBOL COMBINING STEM # 266A ; 1D158 1D165 1D16E ; MA #* ( ♪ → 𝅘𝅥𝅮 ) EIGHTH NOTE → MUSICAL SYMBOL NOTEHEAD BLACK, MUSICAL SYMBOL COMBINING STEM, MUSICAL SYMBOL COMBINING FLAG-1 # @@ -1362,6 +1380,8 @@ FFED ; 25AA ; MA #* ( ■ → ▪ ) HALFWIDTH BLACK SQUARE → BLACK SMALL SQUAR 21BA ; 1F10E ; MA #* ( ↺ → 🄎 ) ANTICLOCKWISE OPEN CIRCLE ARROW → CIRCLED ANTICLOCKWISE ARROW # +1CCFB ; 1F6F8 ; MA #* ( 𜳻 → 🛸 ) FLYING SAUCER SYMBOL → FLYING SAUCER # + 02D9 ; 0971 ; MA #* ( ˙ → ॱ ) DOT ABOVE → DEVANAGARI SIGN HIGH SPACING DOT # 0D4E ; 0971 ; MA # ( ൎ → ॱ ) MALAYALAM LETTER DOT REPH → DEVANAGARI SIGN HIGH SPACING DOT # →˙→ @@ -1417,6 +1437,7 @@ A9C6 ; A9D0 ; MA #* ( ꧆ → ꧐ ) JAVANESE PADA WINDU → JAVANESE DIGIT ZERO 23E8 ; 2081 2080 ; MA #* ( ⏨ → ₁₀ ) DECIMAL EXPONENT SYMBOL → SUBSCRIPT ONE, SUBSCRIPT ZERO # +1CCF2 ; 0032 ; MA # ( 𜳲 → 2 ) OUTLINED DIGIT TWO → DIGIT TWO # 1D7D0 ; 0032 ; MA # ( 𝟐 → 2 ) MATHEMATICAL BOLD DIGIT TWO → DIGIT TWO # 1D7DA ; 0032 ; MA # ( 𝟚 → 2 ) MATHEMATICAL DOUBLE-STRUCK DIGIT TWO → DIGIT TWO # 1D7E4 ; 0032 ; MA # ( 𝟤 → 2 ) MATHEMATICAL SANS-SERIF DIGIT TWO → DIGIT TWO # @@ -1434,6 +1455,7 @@ A9CF ; 0662 ; MA # ( ꧏ → ‎٢‎ ) JAVANESE PANGRANGKEP → ARABIC-INDIC DI 06F2 ; 0662 ; MA # ( ۲ → ‎٢‎ ) EXTENDED ARABIC-INDIC DIGIT TWO → ARABIC-INDIC DIGIT TWO # 0AE8 ; 0968 ; MA # ( ૨ → २ ) GUJARATI DIGIT TWO → DEVANAGARI DIGIT TWO # +0AB0 ; 0968 ; MA # ( ર → २ ) GUJARATI LETTER RA → DEVANAGARI DIGIT TWO # →૨→ 114D2 ; 09E8 ; MA # ( 𑓒 → ২ ) TIRHUTA DIGIT TWO → BENGALI DIGIT TWO # @@ -1490,6 +1512,9 @@ A9CF ; 0662 ; MA # ( ꧏ → ‎٢‎ ) JAVANESE PANGRANGKEP → ARABIC-INDIC DI 335A ; 0032 70B9 ; MA #* ( ㍚ → 2点 ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO → DIGIT TWO, CJK UNIFIED IDEOGRAPH-70B9 # 1D206 ; 0033 ; MA #* ( 𝈆 → 3 ) GREEK VOCAL NOTATION SYMBOL-7 → DIGIT THREE # +0969 ; 0033 ; MA # ( ३ → 3 ) DEVANAGARI DIGIT THREE → DIGIT THREE # →૩→ +0AE9 ; 0033 ; MA # ( ૩ → 3 ) GUJARATI DIGIT THREE → DIGIT THREE # +1CCF3 ; 0033 ; MA # ( 𜳳 → 3 ) OUTLINED DIGIT THREE → DIGIT THREE # 1D7D1 ; 0033 ; MA # ( 𝟑 → 3 ) MATHEMATICAL BOLD DIGIT THREE → DIGIT THREE # 1D7DB ; 0033 ; MA # ( 𝟛 → 3 ) MATHEMATICAL DOUBLE-STRUCK DIGIT THREE → DIGIT THREE # 1D7E5 ; 0033 ; MA # ( 𝟥 → 3 ) MATHEMATICAL SANS-SERIF DIGIT THREE → DIGIT THREE # @@ -1500,6 +1525,8 @@ A7AB ; 0033 ; MA # ( Ɜ → 3 ) LATIN CAPITAL LETTER REVERSED OPEN E → DIGIT 021C ; 0033 ; MA # ( Ȝ → 3 ) LATIN CAPITAL LETTER YOGH → DIGIT THREE # →Ʒ→ 01B7 ; 0033 ; MA # ( Ʒ → 3 ) LATIN CAPITAL LETTER EZH → DIGIT THREE # A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # +2C9C ; 0033 ; MA # ( Ⲝ → 3 ) COPTIC CAPITAL LETTER KSI → DIGIT THREE # →Ʒ→ +2CC4 ; 0033 ; MA # ( Ⳅ → 3 ) COPTIC CAPITAL LETTER OLD COPTIC SHEI → DIGIT THREE # →Ʒ→ 2CCC ; 0033 ; MA # ( Ⳍ → 3 ) COPTIC CAPITAL LETTER OLD COPTIC HORI → DIGIT THREE # →Ȝ→→Ʒ→ 0417 ; 0033 ; MA # ( З → 3 ) CYRILLIC CAPITAL LETTER ZE → DIGIT THREE # 04E0 ; 0033 ; MA # ( Ӡ → 3 ) CYRILLIC CAPITAL LETTER ABKHASIAN DZE → DIGIT THREE # →Ʒ→ @@ -1509,8 +1536,6 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 06F3 ; 0663 ; MA # ( ۳ → ‎٣‎ ) EXTENDED ARABIC-INDIC DIGIT THREE → ARABIC-INDIC DIGIT THREE # 1E8C9 ; 0663 ; MA #* ( ‎𞣉‎ → ‎٣‎ ) MENDE KIKAKUI DIGIT THREE → ARABIC-INDIC DIGIT THREE # -0AE9 ; 0969 ; MA # ( ૩ → ३ ) GUJARATI DIGIT THREE → DEVANAGARI DIGIT THREE # - 2462 ; 2782 ; MA #* ( ③ → ➂ ) CIRCLED DIGIT THREE → DINGBAT CIRCLED SANS-SERIF DIGIT THREE # 0498 ; 0033 0326 ; MA # ( Ҙ → 3̦ ) CYRILLIC CAPITAL LETTER ZE WITH DESCENDER → DIGIT THREE, COMBINING COMMA BELOW # →З̧→ @@ -1529,6 +1554,7 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 335B ; 0033 70B9 ; MA #* ( ㍛ → 3点 ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE → DIGIT THREE, CJK UNIFIED IDEOGRAPH-70B9 # +1CCF4 ; 0034 ; MA # ( 𜳴 → 4 ) OUTLINED DIGIT FOUR → DIGIT FOUR # 1D7D2 ; 0034 ; MA # ( 𝟒 → 4 ) MATHEMATICAL BOLD DIGIT FOUR → DIGIT FOUR # 1D7DC ; 0034 ; MA # ( 𝟜 → 4 ) MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR → DIGIT FOUR # 1D7E6 ; 0034 ; MA # ( 𝟦 → 4 ) MATHEMATICAL SANS-SERIF DIGIT FOUR → DIGIT FOUR # @@ -1556,6 +1582,7 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 335C ; 0034 70B9 ; MA #* ( ㍜ → 4点 ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR → DIGIT FOUR, CJK UNIFIED IDEOGRAPH-70B9 # +1CCF5 ; 0035 ; MA # ( 𜳵 → 5 ) OUTLINED DIGIT FIVE → DIGIT FIVE # 1D7D3 ; 0035 ; MA # ( 𝟓 → 5 ) MATHEMATICAL BOLD DIGIT FIVE → DIGIT FIVE # 1D7DD ; 0035 ; MA # ( 𝟝 → 5 ) MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE → DIGIT FIVE # 1D7E7 ; 0035 ; MA # ( 𝟧 → 5 ) MATHEMATICAL SANS-SERIF DIGIT FIVE → DIGIT FIVE # @@ -1577,13 +1604,17 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 335D ; 0035 70B9 ; MA #* ( ㍝ → 5点 ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE → DIGIT FIVE, CJK UNIFIED IDEOGRAPH-70B9 # +1CCF6 ; 0036 ; MA # ( 𜳶 → 6 ) OUTLINED DIGIT SIX → DIGIT SIX # 1D7D4 ; 0036 ; MA # ( 𝟔 → 6 ) MATHEMATICAL BOLD DIGIT SIX → DIGIT SIX # 1D7DE ; 0036 ; MA # ( 𝟞 → 6 ) MATHEMATICAL DOUBLE-STRUCK DIGIT SIX → DIGIT SIX # 1D7E8 ; 0036 ; MA # ( 𝟨 → 6 ) MATHEMATICAL SANS-SERIF DIGIT SIX → DIGIT SIX # 1D7F2 ; 0036 ; MA # ( 𝟲 → 6 ) MATHEMATICAL SANS-SERIF BOLD DIGIT SIX → DIGIT SIX # 1D7FC ; 0036 ; MA # ( 𝟼 → 6 ) MATHEMATICAL MONOSPACE DIGIT SIX → DIGIT SIX # 1FBF6 ; 0036 ; MA # ( 🯶 → 6 ) SEGMENTED DIGIT SIX → DIGIT SIX # +2CD3 ; 0036 ; MA # ( ⳓ → 6 ) COPTIC SMALL LETTER OLD COPTIC HEI → DIGIT SIX # 2CD2 ; 0036 ; MA # ( Ⳓ → 6 ) COPTIC CAPITAL LETTER OLD COPTIC HEI → DIGIT SIX # +03EC ; 0036 ; MA # ( Ϭ → 6 ) COPTIC CAPITAL LETTER SHIMA → DIGIT SIX # +2CDC ; 0036 ; MA # ( Ⳝ → 6 ) COPTIC CAPITAL LETTER OLD NUBIAN SHIMA → DIGIT SIX # →Ϭ→ 0431 ; 0036 ; MA # ( б → 6 ) CYRILLIC SMALL LETTER BE → DIGIT SIX # 13EE ; 0036 ; MA # ( Ꮾ → 6 ) CHEROKEE LETTER WV → DIGIT SIX # 118D5 ; 0036 ; MA # ( 𑣕 → 6 ) WARANG CITI SMALL LETTER AT → DIGIT SIX # @@ -1605,6 +1636,7 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 335E ; 0036 70B9 ; MA #* ( ㍞ → 6点 ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX → DIGIT SIX, CJK UNIFIED IDEOGRAPH-70B9 # 1D212 ; 0037 ; MA #* ( 𝈒 → 7 ) GREEK VOCAL NOTATION SYMBOL-19 → DIGIT SEVEN # +1CCF7 ; 0037 ; MA # ( 𜳷 → 7 ) OUTLINED DIGIT SEVEN → DIGIT SEVEN # 1D7D5 ; 0037 ; MA # ( 𝟕 → 7 ) MATHEMATICAL BOLD DIGIT SEVEN → DIGIT SEVEN # 1D7DF ; 0037 ; MA # ( 𝟟 → 7 ) MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN → DIGIT SEVEN # 1D7E9 ; 0037 ; MA # ( 𝟩 → 7 ) MATHEMATICAL SANS-SERIF DIGIT SEVEN → DIGIT SEVEN # @@ -1630,6 +1662,7 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 09EA ; 0038 ; MA # ( ৪ → 8 ) BENGALI DIGIT FOUR → DIGIT EIGHT # 0A6A ; 0038 ; MA # ( ੪ → 8 ) GURMUKHI DIGIT FOUR → DIGIT EIGHT # 1E8CB ; 0038 ; MA #* ( ‎𞣋‎ → 8 ) MENDE KIKAKUI DIGIT FIVE → DIGIT EIGHT # +1CCF8 ; 0038 ; MA # ( 𜳸 → 8 ) OUTLINED DIGIT EIGHT → DIGIT EIGHT # 1D7D6 ; 0038 ; MA # ( 𝟖 → 8 ) MATHEMATICAL BOLD DIGIT EIGHT → DIGIT EIGHT # 1D7E0 ; 0038 ; MA # ( 𝟠 → 8 ) MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT → DIGIT EIGHT # 1D7EA ; 0038 ; MA # ( 𝟪 → 8 ) MATHEMATICAL SANS-SERIF DIGIT EIGHT → DIGIT EIGHT # @@ -1658,6 +1691,7 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 0B68 ; 0039 ; MA # ( ୨ → 9 ) ORIYA DIGIT TWO → DIGIT NINE # 09ED ; 0039 ; MA # ( ৭ → 9 ) BENGALI DIGIT SEVEN → DIGIT NINE # 0D6D ; 0039 ; MA # ( ൭ → 9 ) MALAYALAM DIGIT SEVEN → DIGIT NINE # +1CCF9 ; 0039 ; MA # ( 𜳹 → 9 ) OUTLINED DIGIT NINE → DIGIT NINE # 1D7D7 ; 0039 ; MA # ( 𝟗 → 9 ) MATHEMATICAL BOLD DIGIT NINE → DIGIT NINE # 1D7E1 ; 0039 ; MA # ( 𝟡 → 9 ) MATHEMATICAL DOUBLE-STRUCK DIGIT NINE → DIGIT NINE # 1D7EB ; 0039 ; MA # ( 𝟫 → 9 ) MATHEMATICAL SANS-SERIF DIGIT NINE → DIGIT NINE # @@ -1665,6 +1699,7 @@ A76A ; 0033 ; MA # ( Ꝫ → 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE # 1D7FF ; 0039 ; MA # ( 𝟿 → 9 ) MATHEMATICAL MONOSPACE DIGIT NINE → DIGIT NINE # 1FBF9 ; 0039 ; MA # ( 🯹 → 9 ) SEGMENTED DIGIT NINE → DIGIT NINE # A76E ; 0039 ; MA # ( Ꝯ → 9 ) LATIN CAPITAL LETTER CON → DIGIT NINE # +2CCB ; 0039 ; MA # ( ⳋ → 9 ) COPTIC SMALL LETTER DIALECT-P HORI → DIGIT NINE # 2CCA ; 0039 ; MA # ( Ⳋ → 9 ) COPTIC CAPITAL LETTER DIALECT-P HORI → DIGIT NINE # 118CC ; 0039 ; MA # ( 𑣌 → 9 ) WARANG CITI SMALL LETTER KO → DIGIT NINE # 118AC ; 0039 ; MA # ( 𑢬 → 9 ) WARANG CITI CAPITAL LETTER KO → DIGIT NINE # @@ -1715,6 +1750,7 @@ FF41 ; 0061 ; MA # ( a → a ) FULLWIDTH LATIN SMALL LETTER A → LATIN SMALL 2DF6 ; 0363 ; MA # ( ⷶ → ͣ ) COMBINING CYRILLIC LETTER A → COMBINING LATIN SMALL LETTER A # FF21 ; 0041 ; MA # ( A → A ) FULLWIDTH LATIN CAPITAL LETTER A → LATIN CAPITAL LETTER A # →А→ +1CCD6 ; 0041 ; MA #* ( 𜳖 → A ) OUTLINED LATIN CAPITAL LETTER A → LATIN CAPITAL LETTER A # 1D400 ; 0041 ; MA # ( 𝐀 → A ) MATHEMATICAL BOLD CAPITAL A → LATIN CAPITAL LETTER A # 1D434 ; 0041 ; MA # ( 𝐴 → A ) MATHEMATICAL ITALIC CAPITAL A → LATIN CAPITAL LETTER A # 1D468 ; 0041 ; MA # ( 𝑨 → A ) MATHEMATICAL BOLD ITALIC CAPITAL A → LATIN CAPITAL LETTER A # @@ -1814,9 +1850,11 @@ A4EF ; 2C6F ; MA # ( ꓯ → Ɐ ) LISU LETTER AE → LATIN CAPITAL LETTER TURNE 13CF ; 0062 ; MA # ( Ꮟ → b ) CHEROKEE LETTER SI → LATIN SMALL LETTER B # 1472 ; 0062 ; MA # ( ᑲ → b ) CANADIAN SYLLABICS KA → LATIN SMALL LETTER B # 15AF ; 0062 ; MA # ( ᖯ → b ) CANADIAN SYLLABICS AIVILIK B → LATIN SMALL LETTER B # +16EB6 ; 0062 ; MA # ( 𖺶 → b ) BERIA ERFE CAPITAL LETTER UI → LATIN SMALL LETTER B # →Ь→→Ƅ→ FF22 ; 0042 ; MA # ( B → B ) FULLWIDTH LATIN CAPITAL LETTER B → LATIN CAPITAL LETTER B # →Β→ 212C ; 0042 ; MA # ( ℬ → B ) SCRIPT CAPITAL B → LATIN CAPITAL LETTER B # +1CCD7 ; 0042 ; MA #* ( 𜳗 → B ) OUTLINED LATIN CAPITAL LETTER B → LATIN CAPITAL LETTER B # 1D401 ; 0042 ; MA # ( 𝐁 → B ) MATHEMATICAL BOLD CAPITAL B → LATIN CAPITAL LETTER B # 1D435 ; 0042 ; MA # ( 𝐵 → B ) MATHEMATICAL ITALIC CAPITAL B → LATIN CAPITAL LETTER B # 1D469 ; 0042 ; MA # ( 𝑩 → B ) MATHEMATICAL BOLD ITALIC CAPITAL B → LATIN CAPITAL LETTER B # @@ -1836,6 +1874,7 @@ A7B4 ; 0042 ; MA # ( Ꞵ → B ) LATIN CAPITAL LETTER BETA → LATIN CAPITAL LET 1D71D ; 0042 ; MA # ( 𝜝 → B ) MATHEMATICAL BOLD ITALIC CAPITAL BETA → LATIN CAPITAL LETTER B # →Β→ 1D757 ; 0042 ; MA # ( 𝝗 → B ) MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA → LATIN CAPITAL LETTER B # →Β→ 1D791 ; 0042 ; MA # ( 𝞑 → B ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA → LATIN CAPITAL LETTER B # →Β→ +2C82 ; 0042 ; MA # ( Ⲃ → B ) COPTIC CAPITAL LETTER VIDA → LATIN CAPITAL LETTER B # 0412 ; 0042 ; MA # ( В → B ) CYRILLIC CAPITAL LETTER VE → LATIN CAPITAL LETTER B # 13F4 ; 0042 ; MA # ( Ᏼ → B ) CHEROKEE LETTER YV → LATIN CAPITAL LETTER B # 15F7 ; 0042 ; MA # ( ᗷ → B ) CANADIAN SYLLABICS CARRIER KHE → LATIN CAPITAL LETTER B # @@ -1866,6 +1905,7 @@ A4D0 ; 0042 ; MA # ( ꓐ → B ) LISU LETTER BA → LATIN CAPITAL LETTER B # 042B ; 0062 006C ; MA # ( Ы → bl ) CYRILLIC CAPITAL LETTER YERU → LATIN SMALL LETTER B, LATIN SMALL LETTER L # →ЬІ→→Ь1→ +2C83 ; 0299 ; MA # ( ⲃ → ʙ ) COPTIC SMALL LETTER VIDA → LATIN LETTER SMALL CAPITAL B # →в→ 0432 ; 0299 ; MA # ( в → ʙ ) CYRILLIC SMALL LETTER VE → LATIN LETTER SMALL CAPITAL B # 13FC ; 0299 ; MA # ( ᏼ → ʙ ) CHEROKEE SMALL LETTER YV → LATIN LETTER SMALL CAPITAL B # @@ -1888,18 +1928,21 @@ FF43 ; 0063 ; MA # ( c → c ) FULLWIDTH LATIN SMALL LETTER C → LATIN SMALL 03F2 ; 0063 ; MA # ( ϲ → c ) GREEK LUNATE SIGMA SYMBOL → LATIN SMALL LETTER C # 2CA5 ; 0063 ; MA # ( ⲥ → c ) COPTIC SMALL LETTER SIMA → LATIN SMALL LETTER C # →ϲ→ 0441 ; 0063 ; MA # ( с → c ) CYRILLIC SMALL LETTER ES → LATIN SMALL LETTER C # +1004 ; 0063 ; MA # ( င → c ) MYANMAR LETTER NGA → LATIN SMALL LETTER C # +105A ; 0063 ; MA # ( ၚ → c ) MYANMAR LETTER MON NGA → LATIN SMALL LETTER C # →င→ ABAF ; 0063 ; MA # ( ꮯ → c ) CHEROKEE SMALL LETTER TLI → LATIN SMALL LETTER C # →ᴄ→ 1043D ; 0063 ; MA # ( 𐐽 → c ) DESERET SMALL LETTER CHEE → LATIN SMALL LETTER C # 2DED ; 0368 ; MA # ( ⷭ → ͨ ) COMBINING CYRILLIC LETTER ES → COMBINING LATIN SMALL LETTER C # 1F74C ; 0043 ; MA #* ( 🝌 → C ) ALCHEMICAL SYMBOL FOR CALX → LATIN CAPITAL LETTER C # -118F2 ; 0043 ; MA #* ( 𑣲 → C ) WARANG CITI NUMBER NINETY → LATIN CAPITAL LETTER C # 118E9 ; 0043 ; MA # ( 𑣩 → C ) WARANG CITI DIGIT NINE → LATIN CAPITAL LETTER C # +118F2 ; 0043 ; MA #* ( 𑣲 → C ) WARANG CITI NUMBER NINETY → LATIN CAPITAL LETTER C # FF23 ; 0043 ; MA # ( C → C ) FULLWIDTH LATIN CAPITAL LETTER C → LATIN CAPITAL LETTER C # →С→ 216D ; 0043 ; MA # ( Ⅽ → C ) ROMAN NUMERAL ONE HUNDRED → LATIN CAPITAL LETTER C # 2102 ; 0043 ; MA # ( ℂ → C ) DOUBLE-STRUCK CAPITAL C → LATIN CAPITAL LETTER C # 212D ; 0043 ; MA # ( ℭ → C ) BLACK-LETTER CAPITAL C → LATIN CAPITAL LETTER C # +1CCD8 ; 0043 ; MA #* ( 𜳘 → C ) OUTLINED LATIN CAPITAL LETTER C → LATIN CAPITAL LETTER C # 1D402 ; 0043 ; MA # ( 𝐂 → C ) MATHEMATICAL BOLD CAPITAL C → LATIN CAPITAL LETTER C # 1D436 ; 0043 ; MA # ( 𝐶 → C ) MATHEMATICAL ITALIC CAPITAL C → LATIN CAPITAL LETTER C # 1D46A ; 0043 ; MA # ( 𝑪 → C ) MATHEMATICAL BOLD ITALIC CAPITAL C → LATIN CAPITAL LETTER C # @@ -1995,6 +2038,7 @@ A4D2 ; 0064 ; MA # ( ꓒ → d ) LISU LETTER PHA → LATIN SMALL LETTER D # 216E ; 0044 ; MA # ( Ⅾ → D ) ROMAN NUMERAL FIVE HUNDRED → LATIN CAPITAL LETTER D # 2145 ; 0044 ; MA # ( ⅅ → D ) DOUBLE-STRUCK ITALIC CAPITAL D → LATIN CAPITAL LETTER D # +1CCD9 ; 0044 ; MA #* ( 𜳙 → D ) OUTLINED LATIN CAPITAL LETTER D → LATIN CAPITAL LETTER D # 1D403 ; 0044 ; MA # ( 𝐃 → D ) MATHEMATICAL BOLD CAPITAL D → LATIN CAPITAL LETTER D # 1D437 ; 0044 ; MA # ( 𝐷 → D ) MATHEMATICAL ITALIC CAPITAL D → LATIN CAPITAL LETTER D # 1D46B ; 0044 ; MA # ( 𝑫 → D ) MATHEMATICAL BOLD ITALIC CAPITAL D → LATIN CAPITAL LETTER D # @@ -2059,6 +2103,7 @@ AB70 ; 1D05 ; MA # ( ꭰ → ᴅ ) CHEROKEE SMALL LETTER A → LATIN LETTER SMAL 1D739 ; 1E9F ; MA # ( 𝜹 → ẟ ) MATHEMATICAL BOLD ITALIC SMALL DELTA → LATIN SMALL LETTER DELTA # →δ→ 1D773 ; 1E9F ; MA # ( 𝝳 → ẟ ) MATHEMATICAL SANS-SERIF BOLD SMALL DELTA → LATIN SMALL LETTER DELTA # →δ→ 1D7AD ; 1E9F ; MA # ( 𝞭 → ẟ ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA → LATIN SMALL LETTER DELTA # →δ→ +2CDD ; 1E9F ; MA # ( ⳝ → ẟ ) COPTIC SMALL LETTER OLD NUBIAN SHIMA → LATIN SMALL LETTER DELTA # →δ→ 056E ; 1E9F ; MA # ( ծ → ẟ ) ARMENIAN SMALL LETTER CA → LATIN SMALL LETTER DELTA # →δ→ 1577 ; 1E9F ; MA # ( ᕷ → ẟ ) CANADIAN SYLLABICS NUNAVIK HO → LATIN SMALL LETTER DELTA # →δ→ @@ -2087,6 +2132,7 @@ AB32 ; 0065 ; MA # ( ꬲ → e ) LATIN SMALL LETTER BLACKLETTER E → LATIN SMAL 22FF ; 0045 ; MA #* ( ⋿ → E ) Z NOTATION BAG MEMBERSHIP → LATIN CAPITAL LETTER E # FF25 ; 0045 ; MA # ( E → E ) FULLWIDTH LATIN CAPITAL LETTER E → LATIN CAPITAL LETTER E # →Ε→ 2130 ; 0045 ; MA # ( ℰ → E ) SCRIPT CAPITAL E → LATIN CAPITAL LETTER E # +1CCDA ; 0045 ; MA #* ( 𜳚 → E ) OUTLINED LATIN CAPITAL LETTER E → LATIN CAPITAL LETTER E # 1D404 ; 0045 ; MA # ( 𝐄 → E ) MATHEMATICAL BOLD CAPITAL E → LATIN CAPITAL LETTER E # 1D438 ; 0045 ; MA # ( 𝐸 → E ) MATHEMATICAL ITALIC CAPITAL E → LATIN CAPITAL LETTER E # 1D46C ; 0045 ; MA # ( 𝑬 → E ) MATHEMATICAL BOLD ITALIC CAPITAL E → LATIN CAPITAL LETTER E # @@ -2176,12 +2222,14 @@ A79D ; 029A ; MA # ( ꞝ → ʚ ) LATIN SMALL LETTER VOLAPUK OE → LATIN SMALL 1D68F ; 0066 ; MA # ( 𝚏 → f ) MATHEMATICAL MONOSPACE SMALL F → LATIN SMALL LETTER F # AB35 ; 0066 ; MA # ( ꬵ → f ) LATIN SMALL LETTER LENIS F → LATIN SMALL LETTER F # A799 ; 0066 ; MA # ( ꞙ → f ) LATIN SMALL LETTER F WITH STROKE → LATIN SMALL LETTER F # +0192 ; 0066 ; MA # ( ƒ → f ) LATIN SMALL LETTER F WITH HOOK → LATIN SMALL LETTER F # 017F ; 0066 ; MA # ( ſ → f ) LATIN SMALL LETTER LONG S → LATIN SMALL LETTER F # 1E9D ; 0066 ; MA # ( ẝ → f ) LATIN SMALL LETTER LONG S WITH HIGH STROKE → LATIN SMALL LETTER F # 0584 ; 0066 ; MA # ( ք → f ) ARMENIAN SMALL LETTER KEH → LATIN SMALL LETTER F # 1D213 ; 0046 ; MA #* ( 𝈓 → F ) GREEK VOCAL NOTATION SYMBOL-20 → LATIN CAPITAL LETTER F # →Ϝ→ 2131 ; 0046 ; MA # ( ℱ → F ) SCRIPT CAPITAL F → LATIN CAPITAL LETTER F # +1CCDB ; 0046 ; MA #* ( 𜳛 → F ) OUTLINED LATIN CAPITAL LETTER F → LATIN CAPITAL LETTER F # 1D405 ; 0046 ; MA # ( 𝐅 → F ) MATHEMATICAL BOLD CAPITAL F → LATIN CAPITAL LETTER F # 1D439 ; 0046 ; MA # ( 𝐹 → F ) MATHEMATICAL ITALIC CAPITAL F → LATIN CAPITAL LETTER F # 1D46D ; 0046 ; MA # ( 𝑭 → F ) MATHEMATICAL BOLD ITALIC CAPITAL F → LATIN CAPITAL LETTER F # @@ -2205,8 +2253,6 @@ A4DD ; 0046 ; MA # ( ꓝ → F ) LISU LETTER TSA → LATIN CAPITAL LETTER F # 102A5 ; 0046 ; MA # ( 𐊥 → F ) CARIAN LETTER R → LATIN CAPITAL LETTER F # 10525 ; 0046 ; MA # ( 𐔥 → F ) ELBASAN LETTER GHE → LATIN CAPITAL LETTER F # -0192 ; 0066 0326 ; MA # ( ƒ → f̦ ) LATIN SMALL LETTER F WITH HOOK → LATIN SMALL LETTER F, COMBINING COMMA BELOW # →f̡→ - 0191 ; 0046 0326 ; MA # ( Ƒ → F̦ ) LATIN CAPITAL LETTER F WITH HOOK → LATIN CAPITAL LETTER F, COMBINING COMMA BELOW # →F̡→ 1D6E ; 0066 0334 ; MA # ( ᵮ → f̴ ) LATIN SMALL LETTER F WITH MIDDLE TILDE → LATIN SMALL LETTER F, COMBINING TILDE OVERLAY # @@ -2223,7 +2269,7 @@ FB01 ; 0066 0069 ; MA # ( fi → fi ) LATIN SMALL LIGATURE FI → LATIN SMALL L FB02 ; 0066 006C ; MA # ( fl → fl ) LATIN SMALL LIGATURE FL → LATIN SMALL LETTER F, LATIN SMALL LETTER L # -02A9 ; 0066 014B ; MA # ( ʩ → fŋ ) LATIN SMALL LETTER FENG DIGRAPH → LATIN SMALL LETTER F, LATIN SMALL LETTER ENG # +02A9 ; 0066 006E 0329 ; MA # ( ʩ → fn̩ ) LATIN SMALL LETTER FENG DIGRAPH → LATIN SMALL LETTER F, LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →fŋ→ 15B5 ; 2132 ; MA # ( ᖵ → Ⅎ ) CANADIAN SYLLABICS BLACKFOOT WI → TURNED CAPITAL F # A4DE ; 2132 ; MA # ( ꓞ → Ⅎ ) LISU LETTER TSHA → TURNED CAPITAL F # @@ -2250,6 +2296,7 @@ FF47 ; 0067 ; MA # ( g → g ) FULLWIDTH LATIN SMALL LETTER G → LATIN SMALL 018D ; 0067 ; MA # ( ƍ → g ) LATIN SMALL LETTER TURNED DELTA → LATIN SMALL LETTER G # 0581 ; 0067 ; MA # ( ց → g ) ARMENIAN SMALL LETTER CO → LATIN SMALL LETTER G # +1CCDC ; 0047 ; MA #* ( 𜳜 → G ) OUTLINED LATIN CAPITAL LETTER G → LATIN CAPITAL LETTER G # 1D406 ; 0047 ; MA # ( 𝐆 → G ) MATHEMATICAL BOLD CAPITAL G → LATIN CAPITAL LETTER G # 1D43A ; 0047 ; MA # ( 𝐺 → G ) MATHEMATICAL ITALIC CAPITAL G → LATIN CAPITAL LETTER G # 1D46E ; 0047 ; MA # ( 𝑮 → G ) MATHEMATICAL BOLD ITALIC CAPITAL G → LATIN CAPITAL LETTER G # @@ -2310,6 +2357,7 @@ FF28 ; 0048 ; MA # ( H → H ) FULLWIDTH LATIN CAPITAL LETTER H → LATIN CAPI 210B ; 0048 ; MA # ( ℋ → H ) SCRIPT CAPITAL H → LATIN CAPITAL LETTER H # 210C ; 0048 ; MA # ( ℌ → H ) BLACK-LETTER CAPITAL H → LATIN CAPITAL LETTER H # 210D ; 0048 ; MA # ( ℍ → H ) DOUBLE-STRUCK CAPITAL H → LATIN CAPITAL LETTER H # +1CCDD ; 0048 ; MA #* ( 𜳝 → H ) OUTLINED LATIN CAPITAL LETTER H → LATIN CAPITAL LETTER H # 1D407 ; 0048 ; MA # ( 𝐇 → H ) MATHEMATICAL BOLD CAPITAL H → LATIN CAPITAL LETTER H # 1D43B ; 0048 ; MA # ( 𝐻 → H ) MATHEMATICAL ITALIC CAPITAL H → LATIN CAPITAL LETTER H # 1D46F ; 0048 ; MA # ( 𝑯 → H ) MATHEMATICAL BOLD ITALIC CAPITAL H → LATIN CAPITAL LETTER H # @@ -2351,6 +2399,7 @@ A695 ; 0068 0314 ; MA # ( ꚕ → h̔ ) CYRILLIC SMALL LETTER HWE → LATIN SMAL 04C9 ; 0048 0326 ; MA # ( Ӊ → H̦ ) CYRILLIC CAPITAL LETTER EN WITH TAIL → LATIN CAPITAL LETTER H, COMBINING COMMA BELOW # →Н̡→ 04C7 ; 0048 0326 ; MA # ( Ӈ → H̦ ) CYRILLIC CAPITAL LETTER EN WITH HOOK → LATIN CAPITAL LETTER H, COMBINING COMMA BELOW # →Н̡→ +2C8F ; 029C ; MA # ( ⲏ → ʜ ) COPTIC SMALL LETTER HATE → LATIN LETTER SMALL CAPITAL H # →н→ 043D ; 029C ; MA # ( н → ʜ ) CYRILLIC SMALL LETTER EN → LATIN LETTER SMALL CAPITAL H # AB8B ; 029C ; MA # ( ꮋ → ʜ ) CHEROKEE SMALL LETTER MI → LATIN LETTER SMALL CAPITAL H # @@ -2371,7 +2420,7 @@ A6B1 ; 2C75 ; MA # ( ꚱ → Ⱶ ) BAMUM LETTER NDAA → LATIN CAPITAL LETTER HA A795 ; A727 ; MA # ( ꞕ → ꜧ ) LATIN SMALL LETTER H WITH PALATAL HOOK → LATIN SMALL LETTER HENG # 02DB ; 0069 ; MA #* ( ˛ → i ) OGONEK → LATIN SMALL LETTER I # →ͺ→→ι→→ι→ -2373 ; 0069 ; MA #* ( ⍳ → i ) APL FUNCTIONAL SYMBOL IOTA → LATIN SMALL LETTER I # →ι→ +2373 ; 0069 ; MA #* ( ⍳ → i ) APL FUNCTIONAL SYMBOL IOTA → LATIN SMALL LETTER I # →ɩ→ FF49 ; 0069 ; MA # ( i → i ) FULLWIDTH LATIN SMALL LETTER I → LATIN SMALL LETTER I # →і→ 2170 ; 0069 ; MA # ( ⅰ → i ) SMALL ROMAN NUMERAL ONE → LATIN SMALL LETTER I # 2139 ; 0069 ; MA # ( ℹ → i ) INFORMATION SOURCE → LATIN SMALL LETTER I # @@ -2401,9 +2450,10 @@ FF49 ; 0069 ; MA # ( i → i ) FULLWIDTH LATIN SMALL LETTER I → LATIN SMALL 1D73E ; 0069 ; MA # ( 𝜾 → i ) MATHEMATICAL BOLD ITALIC SMALL IOTA → LATIN SMALL LETTER I # →ι→ 1D778 ; 0069 ; MA # ( 𝝸 → i ) MATHEMATICAL SANS-SERIF BOLD SMALL IOTA → LATIN SMALL LETTER I # →ι→ 1D7B2 ; 0069 ; MA # ( 𝞲 → i ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA → LATIN SMALL LETTER I # →ι→ +2C93 ; 0069 ; MA # ( ⲓ → i ) COPTIC SMALL LETTER IAUDA → LATIN SMALL LETTER I # →ı→ 0456 ; 0069 ; MA # ( і → i ) CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I → LATIN SMALL LETTER I # A647 ; 0069 ; MA # ( ꙇ → i ) CYRILLIC SMALL LETTER IOTA → LATIN SMALL LETTER I # →ι→ -04CF ; 0069 ; MA # ( ӏ → i ) CYRILLIC SMALL LETTER PALOCHKA → LATIN SMALL LETTER I # →ı→ +0582 ; 0069 ; MA # ( ւ → i ) ARMENIAN SMALL LETTER YIWN → LATIN SMALL LETTER I # →ı→ AB75 ; 0069 ; MA # ( ꭵ → i ) CHEROKEE SMALL LETTER V → LATIN SMALL LETTER I # 13A5 ; 0069 ; MA # ( Ꭵ → i ) CHEROKEE LETTER V → LATIN SMALL LETTER I # 118C3 ; 0069 ; MA # ( 𑣃 → i ) WARANG CITI SMALL LETTER YU → LATIN SMALL LETTER I # →ι→ @@ -2449,6 +2499,7 @@ FF4A ; 006A ; MA # ( j → j ) FULLWIDTH LATIN SMALL LETTER J → LATIN SMALL 0458 ; 006A ; MA # ( ј → j ) CYRILLIC SMALL LETTER JE → LATIN SMALL LETTER J # FF2A ; 004A ; MA # ( J → J ) FULLWIDTH LATIN CAPITAL LETTER J → LATIN CAPITAL LETTER J # →Ј→ +1CCDF ; 004A ; MA #* ( 𜳟 → J ) OUTLINED LATIN CAPITAL LETTER J → LATIN CAPITAL LETTER J # 1D409 ; 004A ; MA # ( 𝐉 → J ) MATHEMATICAL BOLD CAPITAL J → LATIN CAPITAL LETTER J # 1D43D ; 004A ; MA # ( 𝐽 → J ) MATHEMATICAL ITALIC CAPITAL J → LATIN CAPITAL LETTER J # 1D471 ; 004A ; MA # ( 𝑱 → J ) MATHEMATICAL BOLD ITALIC CAPITAL J → LATIN CAPITAL LETTER J # @@ -2496,6 +2547,7 @@ AB7B ; 1D0A ; MA # ( ꭻ → ᴊ ) CHEROKEE SMALL LETTER GU → LATIN LETTER SMA 212A ; 004B ; MA # ( K → K ) KELVIN SIGN → LATIN CAPITAL LETTER K # FF2B ; 004B ; MA # ( K → K ) FULLWIDTH LATIN CAPITAL LETTER K → LATIN CAPITAL LETTER K # →Κ→ +1CCE0 ; 004B ; MA #* ( 𜳠 → K ) OUTLINED LATIN CAPITAL LETTER K → LATIN CAPITAL LETTER K # 1D40A ; 004B ; MA # ( 𝐊 → K ) MATHEMATICAL BOLD CAPITAL K → LATIN CAPITAL LETTER K # 1D43E ; 004B ; MA # ( 𝐾 → K ) MATHEMATICAL ITALIC CAPITAL K → LATIN CAPITAL LETTER K # 1D472 ; 004B ; MA # ( 𝑲 → K ) MATHEMATICAL BOLD ITALIC CAPITAL K → LATIN CAPITAL LETTER K # @@ -2543,6 +2595,7 @@ FFE8 ; 006C ; MA #* ( │ → l ) HALFWIDTH FORMS LIGHT VERTICAL → LATIN SMALL 06F1 ; 006C ; MA # ( ۱ → l ) EXTENDED ARABIC-INDIC DIGIT ONE → LATIN SMALL LETTER L # →1→ 10320 ; 006C ; MA #* ( 𐌠 → l ) OLD ITALIC NUMERAL ONE → LATIN SMALL LETTER L # →𐌉→→I→ 1E8C7 ; 006C ; MA #* ( ‎𞣇‎ → l ) MENDE KIKAKUI DIGIT ONE → LATIN SMALL LETTER L # +1CCF1 ; 006C ; MA # ( 𜳱 → l ) OUTLINED DIGIT ONE → LATIN SMALL LETTER L # →1→ 1D7CF ; 006C ; MA # ( 𝟏 → l ) MATHEMATICAL BOLD DIGIT ONE → LATIN SMALL LETTER L # →1→ 1D7D9 ; 006C ; MA # ( 𝟙 → l ) MATHEMATICAL DOUBLE-STRUCK DIGIT ONE → LATIN SMALL LETTER L # →1→ 1D7E3 ; 006C ; MA # ( 𝟣 → l ) MATHEMATICAL SANS-SERIF DIGIT ONE → LATIN SMALL LETTER L # →1→ @@ -2554,6 +2607,7 @@ FF29 ; 006C ; MA # ( I → l ) FULLWIDTH LATIN CAPITAL LETTER I → LATIN SMAL 2160 ; 006C ; MA # ( Ⅰ → l ) ROMAN NUMERAL ONE → LATIN SMALL LETTER L # →Ӏ→ 2110 ; 006C ; MA # ( ℐ → l ) SCRIPT CAPITAL I → LATIN SMALL LETTER L # →I→ 2111 ; 006C ; MA # ( ℑ → l ) BLACK-LETTER CAPITAL I → LATIN SMALL LETTER L # →I→ +1CCDE ; 006C ; MA #* ( 𜳞 → l ) OUTLINED LATIN CAPITAL LETTER I → LATIN SMALL LETTER L # →I→ 1D408 ; 006C ; MA # ( 𝐈 → l ) MATHEMATICAL BOLD CAPITAL I → LATIN SMALL LETTER L # →I→ 1D43C ; 006C ; MA # ( 𝐼 → l ) MATHEMATICAL ITALIC CAPITAL I → LATIN SMALL LETTER L # →I→ 1D470 ; 006C ; MA # ( 𝑰 → l ) MATHEMATICAL BOLD ITALIC CAPITAL I → LATIN SMALL LETTER L # →I→ @@ -2591,6 +2645,7 @@ FF4C ; 006C ; MA # ( l → l ) FULLWIDTH LATIN SMALL LETTER L → LATIN SMALL 1D798 ; 006C ; MA # ( 𝞘 → l ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA → LATIN SMALL LETTER L # →Ι→ 2C92 ; 006C ; MA # ( Ⲓ → l ) COPTIC CAPITAL LETTER IAUDA → LATIN SMALL LETTER L # →Ӏ→ 0406 ; 006C ; MA # ( І → l ) CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I → LATIN SMALL LETTER L # +04CF ; 006C ; MA # ( ӏ → l ) CYRILLIC SMALL LETTER PALOCHKA → LATIN SMALL LETTER L # →I→ 04C0 ; 006C ; MA # ( Ӏ → l ) CYRILLIC LETTER PALOCHKA → LATIN SMALL LETTER L # 05D5 ; 006C ; MA # ( ‎ו‎ → l ) HEBREW LETTER VAV → LATIN SMALL LETTER L # 05DF ; 006C ; MA # ( ‎ן‎ → l ) HEBREW LETTER FINAL NUN → LATIN SMALL LETTER L # @@ -2606,10 +2661,14 @@ A4F2 ; 006C ; MA # ( ꓲ → l ) LISU LETTER I → LATIN SMALL LETTER L # →I 16F28 ; 006C ; MA # ( 𖼨 → l ) MIAO LETTER GHA → LATIN SMALL LETTER L # →I→ 1028A ; 006C ; MA # ( 𐊊 → l ) LYCIAN LETTER J → LATIN SMALL LETTER L # →I→ 10309 ; 006C ; MA # ( 𐌉 → l ) OLD ITALIC LETTER I → LATIN SMALL LETTER L # →I→ +11DDA ; 006C ; MA # ( 𑷚 → l ) TOLONG SIKI SIGN HECAKA → LATIN SMALL LETTER L # →|→ +11DE1 ; 006C ; MA # ( 𑷡 → l ) TOLONG SIKI DIGIT ONE → LATIN SMALL LETTER L # →|→ +16EAA ; 006C ; MA # ( 𖺪 → l ) BERIA ERFE CAPITAL LETTER LAKKO → LATIN SMALL LETTER L # →I→ 1D22A ; 004C ; MA #* ( 𝈪 → L ) GREEK INSTRUMENTAL NOTATION SYMBOL-23 → LATIN CAPITAL LETTER L # 216C ; 004C ; MA # ( Ⅼ → L ) ROMAN NUMERAL FIFTY → LATIN CAPITAL LETTER L # 2112 ; 004C ; MA # ( ℒ → L ) SCRIPT CAPITAL L → LATIN CAPITAL LETTER L # +1CCE1 ; 004C ; MA #* ( 𜳡 → L ) OUTLINED LATIN CAPITAL LETTER L → LATIN CAPITAL LETTER L # 1D40B ; 004C ; MA # ( 𝐋 → L ) MATHEMATICAL BOLD CAPITAL L → LATIN CAPITAL LETTER L # 1D43F ; 004C ; MA # ( 𝐿 → L ) MATHEMATICAL ITALIC CAPITAL L → LATIN CAPITAL LETTER L # 1D473 ; 004C ; MA # ( 𝑳 → L ) MATHEMATICAL BOLD ITALIC CAPITAL L → LATIN CAPITAL LETTER L # @@ -2784,6 +2843,7 @@ ABAE ; 029F ; MA # ( ꮮ → ʟ ) CHEROKEE SMALL LETTER TLE → LATIN LETTER SMA FF2D ; 004D ; MA # ( M → M ) FULLWIDTH LATIN CAPITAL LETTER M → LATIN CAPITAL LETTER M # →Μ→ 216F ; 004D ; MA # ( Ⅿ → M ) ROMAN NUMERAL ONE THOUSAND → LATIN CAPITAL LETTER M # 2133 ; 004D ; MA # ( ℳ → M ) SCRIPT CAPITAL M → LATIN CAPITAL LETTER M # +1CCE2 ; 004D ; MA #* ( 𜳢 → M ) OUTLINED LATIN CAPITAL LETTER M → LATIN CAPITAL LETTER M # 1D40C ; 004D ; MA # ( 𝐌 → M ) MATHEMATICAL BOLD CAPITAL M → LATIN CAPITAL LETTER M # 1D440 ; 004D ; MA # ( 𝑀 → M ) MATHEMATICAL ITALIC CAPITAL M → LATIN CAPITAL LETTER M # 1D474 ; 004D ; MA # ( 𝑴 → M ) MATHEMATICAL BOLD ITALIC CAPITAL M → LATIN CAPITAL LETTER M # @@ -2836,6 +2896,7 @@ A4DF ; 004D ; MA # ( ꓟ → M ) LISU LETTER MA → LATIN CAPITAL LETTER M # FF2E ; 004E ; MA # ( N → N ) FULLWIDTH LATIN CAPITAL LETTER N → LATIN CAPITAL LETTER N # →Ν→ 2115 ; 004E ; MA # ( ℕ → N ) DOUBLE-STRUCK CAPITAL N → LATIN CAPITAL LETTER N # +1CCE3 ; 004E ; MA #* ( 𜳣 → N ) OUTLINED LATIN CAPITAL LETTER N → LATIN CAPITAL LETTER N # 1D40D ; 004E ; MA # ( 𝐍 → N ) MATHEMATICAL BOLD CAPITAL N → LATIN CAPITAL LETTER N # 1D441 ; 004E ; MA # ( 𝑁 → N ) MATHEMATICAL ITALIC CAPITAL N → LATIN CAPITAL LETTER N # 1D475 ; 004E ; MA # ( 𝑵 → N ) MATHEMATICAL BOLD ITALIC CAPITAL N → LATIN CAPITAL LETTER N # @@ -2863,12 +2924,14 @@ A4E0 ; 004E ; MA # ( ꓠ → N ) LISU LETTER NA → LATIN CAPITAL LETTER N # 0273 ; 006E 0328 ; MA # ( ɳ → n̨ ) LATIN SMALL LETTER N WITH RETROFLEX HOOK → LATIN SMALL LETTER N, COMBINING OGONEK # →n̢→ 019E ; 006E 0329 ; MA # ( ƞ → n̩ ) LATIN SMALL LETTER N WITH LONG RIGHT LEG → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # +014B ; 006E 0329 ; MA # ( ŋ → n̩ ) LATIN SMALL LETTER ENG → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →η→→ƞ→ 03B7 ; 006E 0329 ; MA # ( η → n̩ ) GREEK SMALL LETTER ETA → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →ƞ→ 1D6C8 ; 006E 0329 ; MA # ( 𝛈 → n̩ ) MATHEMATICAL BOLD SMALL ETA → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →η→→ƞ→ 1D702 ; 006E 0329 ; MA # ( 𝜂 → n̩ ) MATHEMATICAL ITALIC SMALL ETA → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →η→→ƞ→ 1D73C ; 006E 0329 ; MA # ( 𝜼 → n̩ ) MATHEMATICAL BOLD ITALIC SMALL ETA → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →η→→ƞ→ 1D776 ; 006E 0329 ; MA # ( 𝝶 → n̩ ) MATHEMATICAL SANS-SERIF BOLD SMALL ETA → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →η→→ƞ→ 1D7B0 ; 006E 0329 ; MA # ( 𝞰 → n̩ ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →η→→ƞ→ +0572 ; 006E 0329 ; MA # ( ղ → n̩ ) ARMENIAN SMALL LETTER GHAD → LATIN SMALL LETTER N, COMBINING VERTICAL LINE BELOW # →η→→ƞ→ 019D ; 004E 0326 ; MA # ( Ɲ → N̦ ) LATIN CAPITAL LETTER N WITH LEFT HOOK → LATIN CAPITAL LETTER N, COMBINING COMMA BELOW # →N̡→ @@ -2882,6 +2945,8 @@ A4E0 ; 004E ; MA # ( ꓠ → N ) LISU LETTER NA → LATIN CAPITAL LETTER N # 2116 ; 004E 006F ; MA #* ( № → No ) NUMERO SIGN → LATIN CAPITAL LETTER N, LATIN SMALL LETTER O # +2C9B ; 0274 ; MA # ( ⲛ → ɴ ) COPTIC SMALL LETTER NI → LATIN LETTER SMALL CAPITAL N # + 0377 ; 1D0E ; MA # ( ͷ → ᴎ ) GREEK SMALL LETTER PAMPHYLIAN DIGAMMA → LATIN LETTER SMALL CAPITAL REVERSED N # →и→ 0438 ; 1D0E ; MA # ( и → ᴎ ) CYRILLIC SMALL LETTER I → LATIN LETTER SMALL CAPITAL REVERSED N # 1044D ; 1D0E ; MA # ( 𐑍 → ᴎ ) DESERET SMALL LETTER ENG → LATIN LETTER SMALL CAPITAL REVERSED N # →и→ @@ -2893,15 +2958,18 @@ A4E0 ; 004E ; MA # ( ꓠ → N ) LISU LETTER NA → LATIN CAPITAL LETTER N # 0D02 ; 006F ; MA # ( ം → o ) MALAYALAM SIGN ANUSVARA → LATIN SMALL LETTER O # 0D82 ; 006F ; MA # ( ං → o ) SINHALA SIGN ANUSVARAYA → LATIN SMALL LETTER O # 0966 ; 006F ; MA # ( ० → o ) DEVANAGARI DIGIT ZERO → LATIN SMALL LETTER O # +09E6 ; 006F ; MA # ( ০ → o ) BENGALI DIGIT ZERO → LATIN SMALL LETTER O # 0A66 ; 006F ; MA # ( ੦ → o ) GURMUKHI DIGIT ZERO → LATIN SMALL LETTER O # 0AE6 ; 006F ; MA # ( ૦ → o ) GUJARATI DIGIT ZERO → LATIN SMALL LETTER O # +0B66 ; 006F ; MA # ( ୦ → o ) ORIYA DIGIT ZERO → LATIN SMALL LETTER O # 0BE6 ; 006F ; MA # ( ௦ → o ) TAMIL DIGIT ZERO → LATIN SMALL LETTER O # 0C66 ; 006F ; MA # ( ౦ → o ) TELUGU DIGIT ZERO → LATIN SMALL LETTER O # -0CE6 ; 006F ; MA # ( ೦ → o ) KANNADA DIGIT ZERO → LATIN SMALL LETTER O # →౦→ 0D66 ; 006F ; MA # ( ൦ → o ) MALAYALAM DIGIT ZERO → LATIN SMALL LETTER O # 0E50 ; 006F ; MA # ( ๐ → o ) THAI DIGIT ZERO → LATIN SMALL LETTER O # 0ED0 ; 006F ; MA # ( ໐ → o ) LAO DIGIT ZERO → LATIN SMALL LETTER O # 1040 ; 006F ; MA # ( ၀ → o ) MYANMAR DIGIT ZERO → LATIN SMALL LETTER O # +17E0 ; 006F ; MA # ( ០ → o ) KHMER DIGIT ZERO → LATIN SMALL LETTER O # +114D0 ; 006F ; MA # ( 𑓐 → o ) TIRHUTA DIGIT ZERO → LATIN SMALL LETTER O # →০→ 0665 ; 006F ; MA # ( ‎٥‎ → o ) ARABIC-INDIC DIGIT FIVE → LATIN SMALL LETTER O # 06F5 ; 006F ; MA # ( ۵ → o ) EXTENDED ARABIC-INDIC DIGIT FIVE → LATIN SMALL LETTER O # →‎٥‎→ FF4F ; 006F ; MA # ( o → o ) FULLWIDTH LATIN SMALL LETTER O → LATIN SMALL LETTER O # →о→ @@ -2934,6 +3002,7 @@ AB3D ; 006F ; MA # ( ꬽ → o ) LATIN SMALL LETTER BLACKLETTER O → LATIN SMAL 1D782 ; 006F ; MA # ( 𝞂 → o ) MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA → LATIN SMALL LETTER O # →σ→ 1D7BC ; 006F ; MA # ( 𝞼 → o ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA → LATIN SMALL LETTER O # →σ→ 2C9F ; 006F ; MA # ( ⲟ → o ) COPTIC SMALL LETTER O → LATIN SMALL LETTER O # +03ED ; 006F ; MA # ( ϭ → o ) COPTIC SMALL LETTER SHIMA → LATIN SMALL LETTER O # →σ→ 043E ; 006F ; MA # ( о → o ) CYRILLIC SMALL LETTER O → LATIN SMALL LETTER O # 10FF ; 006F ; MA # ( ჿ → o ) GEORGIAN LETTER LABIAL SIGN → LATIN SMALL LETTER O # 0585 ; 006F ; MA # ( օ → o ) ARMENIAN SMALL LETTER OH → LATIN SMALL LETTER O # @@ -2966,11 +3035,10 @@ FBA6 ; 006F ; MA # ( ‎ﮦ‎ → o ) ARABIC LETTER HEH GOAL ISOLATED FORM → 0030 ; 004F ; MA # ( 0 → O ) DIGIT ZERO → LATIN CAPITAL LETTER O # 07C0 ; 004F ; MA # ( ‎߀‎ → O ) NKO DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ -09E6 ; 004F ; MA # ( ০ → O ) BENGALI DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ -0B66 ; 004F ; MA # ( ୦ → O ) ORIYA DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ +0CE6 ; 004F ; MA # ( ೦ → O ) KANNADA DIGIT ZERO → LATIN CAPITAL LETTER O # 3007 ; 004F ; MA # ( 〇 → O ) IDEOGRAPHIC NUMBER ZERO → LATIN CAPITAL LETTER O # -114D0 ; 004F ; MA # ( 𑓐 → O ) TIRHUTA DIGIT ZERO → LATIN CAPITAL LETTER O # →০→→0→ 118E0 ; 004F ; MA # ( 𑣠 → O ) WARANG CITI DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ +1CCF0 ; 004F ; MA # ( 𜳰 → O ) OUTLINED DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ 1D7CE ; 004F ; MA # ( 𝟎 → O ) MATHEMATICAL BOLD DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ 1D7D8 ; 004F ; MA # ( 𝟘 → O ) MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ 1D7E2 ; 004F ; MA # ( 𝟢 → O ) MATHEMATICAL SANS-SERIF DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ @@ -2978,6 +3046,7 @@ FBA6 ; 006F ; MA # ( ‎ﮦ‎ → o ) ARABIC LETTER HEH GOAL ISOLATED FORM → 1D7F6 ; 004F ; MA # ( 𝟶 → O ) MATHEMATICAL MONOSPACE DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ 1FBF0 ; 004F ; MA # ( 🯰 → O ) SEGMENTED DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ FF2F ; 004F ; MA # ( O → O ) FULLWIDTH LATIN CAPITAL LETTER O → LATIN CAPITAL LETTER O # →О→ +1CCE4 ; 004F ; MA #* ( 𜳤 → O ) OUTLINED LATIN CAPITAL LETTER O → LATIN CAPITAL LETTER O # 1D40E ; 004F ; MA # ( 𝐎 → O ) MATHEMATICAL BOLD CAPITAL O → LATIN CAPITAL LETTER O # 1D442 ; 004F ; MA # ( 𝑂 → O ) MATHEMATICAL ITALIC CAPITAL O → LATIN CAPITAL LETTER O # 1D476 ; 004F ; MA # ( 𝑶 → O ) MATHEMATICAL BOLD ITALIC CAPITAL O → LATIN CAPITAL LETTER O # @@ -3002,7 +3071,7 @@ FF2F ; 004F ; MA # ( O → O ) FULLWIDTH LATIN CAPITAL LETTER O → LATIN CAPI 0555 ; 004F ; MA # ( Օ → O ) ARMENIAN CAPITAL LETTER OH → LATIN CAPITAL LETTER O # 2D54 ; 004F ; MA # ( ⵔ → O ) TIFINAGH LETTER YAR → LATIN CAPITAL LETTER O # 12D0 ; 004F ; MA # ( ዐ → O ) ETHIOPIC SYLLABLE PHARYNGEAL A → LATIN CAPITAL LETTER O # →Օ→ -0B20 ; 004F ; MA # ( ଠ → O ) ORIYA LETTER TTHA → LATIN CAPITAL LETTER O # →୦→→0→ +0B20 ; 004F ; MA # ( ଠ → O ) ORIYA LETTER TTHA → LATIN CAPITAL LETTER O # 104C2 ; 004F ; MA # ( 𐓂 → O ) OSAGE CAPITAL LETTER O → LATIN CAPITAL LETTER O # A4F3 ; 004F ; MA # ( ꓳ → O ) LISU LETTER O → LATIN CAPITAL LETTER O # 118B5 ; 004F ; MA # ( 𑢵 → O ) WARANG CITI CAPITAL LETTER AT → LATIN CAPITAL LETTER O # @@ -3010,6 +3079,7 @@ A4F3 ; 004F ; MA # ( ꓳ → O ) LISU LETTER O → LATIN CAPITAL LETTER O # 102AB ; 004F ; MA # ( 𐊫 → O ) CARIAN LETTER O → LATIN CAPITAL LETTER O # 10404 ; 004F ; MA # ( 𐐄 → O ) DESERET CAPITAL LETTER LONG O → LATIN CAPITAL LETTER O # 10516 ; 004F ; MA # ( 𐔖 → O ) ELBASAN LETTER O → LATIN CAPITAL LETTER O # +11DE0 ; 004F ; MA # ( 𑷠 → O ) TOLONG SIKI DIGIT ZERO → LATIN CAPITAL LETTER O # →0→ 2070 ; 00BA ; MA #* ( ⁰ → º ) SUPERSCRIPT ZERO → MASCULINE ORDINAL INDICATOR # 1D52 ; 00BA ; MA # ( ᵒ → º ) MODIFIER LETTER SMALL O → MASCULINE ORDINAL INDICATOR # →⁰→ @@ -3032,6 +3102,7 @@ AB3E ; 006F 0338 ; MA # ( ꬾ → o̸ ) LATIN SMALL LETTER BLACKLETTER O WITH ST 0275 ; 006F 0335 ; MA # ( ɵ → o̵ ) LATIN SMALL LETTER BARRED O → LATIN SMALL LETTER O, COMBINING SHORT STROKE OVERLAY # A74B ; 006F 0335 ; MA # ( ꝋ → o̵ ) LATIN SMALL LETTER O WITH LONG STROKE OVERLAY → LATIN SMALL LETTER O, COMBINING SHORT STROKE OVERLAY # →o̶→ +2C91 ; 006F 0335 ; MA # ( ⲑ → o̵ ) COPTIC SMALL LETTER THETHE → LATIN SMALL LETTER O, COMBINING SHORT STROKE OVERLAY # →ɵ→ 04E9 ; 006F 0335 ; MA # ( ө → o̵ ) CYRILLIC SMALL LETTER BARRED O → LATIN SMALL LETTER O, COMBINING SHORT STROKE OVERLAY # →ѳ→ 0473 ; 006F 0335 ; MA # ( ѳ → o̵ ) CYRILLIC SMALL LETTER FITA → LATIN SMALL LETTER O, COMBINING SHORT STROKE OVERLAY # AB8E ; 006F 0335 ; MA # ( ꮎ → o̵ ) CHEROKEE SMALL LETTER NA → LATIN SMALL LETTER O, COMBINING SHORT STROKE OVERLAY # →ɵ→ @@ -3068,6 +3139,7 @@ A74A ; 004F 0335 ; MA # ( Ꝋ → O̵ ) LATIN CAPITAL LETTER O WITH LONG STROKE 1D767 ; 004F 0335 ; MA # ( 𝝧 → O̵ ) MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL → LATIN CAPITAL LETTER O, COMBINING SHORT STROKE OVERLAY # →Θ→→Ꮎ→ 1D797 ; 004F 0335 ; MA # ( 𝞗 → O̵ ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA → LATIN CAPITAL LETTER O, COMBINING SHORT STROKE OVERLAY # →Θ→→Ꮎ→ 1D7A1 ; 004F 0335 ; MA # ( 𝞡 → O̵ ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL → LATIN CAPITAL LETTER O, COMBINING SHORT STROKE OVERLAY # →Θ→→Ꮎ→ +2C90 ; 004F 0335 ; MA # ( Ⲑ → O̵ ) COPTIC CAPITAL LETTER THETHE → LATIN CAPITAL LETTER O, COMBINING SHORT STROKE OVERLAY # →ϴ→→Ѳ→→О̵→ 04E8 ; 004F 0335 ; MA # ( Ө → O̵ ) CYRILLIC CAPITAL LETTER BARRED O → LATIN CAPITAL LETTER O, COMBINING SHORT STROKE OVERLAY # →Ѳ→→О̵→ 0472 ; 004F 0335 ; MA # ( Ѳ → O̵ ) CYRILLIC CAPITAL LETTER FITA → LATIN CAPITAL LETTER O, COMBINING SHORT STROKE OVERLAY # →О̵→ 2D31 ; 004F 0335 ; MA # ( ⴱ → O̵ ) TIFINAGH LETTER YAB → LATIN CAPITAL LETTER O, COMBINING SHORT STROKE OVERLAY # →Ɵ→→O̶→ @@ -3125,6 +3197,7 @@ FC54 ; 006F 0649 ; MA # ( ‎ﱔ‎ → ‎oى‎ ) ARABIC LIGATURE HEH WITH YEH 0D5F ; 006F 0D30 006F ; MA # ( ൟ → oരo ) MALAYALAM LETTER ARCHAIC II → LATIN SMALL LETTER O, MALAYALAM LETTER RA, LATIN SMALL LETTER O # →ംരം→ +10D7 ; 006F 102C ; MA # ( თ → oာ ) GEORGIAN LETTER TAN → LATIN SMALL LETTER O, MYANMAR VOWEL SIGN AA # →တ→→ဝာ→ 1010 ; 006F 102C ; MA # ( တ → oာ ) MYANMAR LETTER TA → LATIN SMALL LETTER O, MYANMAR VOWEL SIGN AA # →ဝာ→ 3358 ; 004F 70B9 ; MA #* ( ㍘ → O点 ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO → LATIN CAPITAL LETTER O, CJK UNIFIED IDEOGRAPH-70B9 # →0点→ @@ -3160,6 +3233,8 @@ FF50 ; 0070 ; MA # ( p → p ) FULLWIDTH LATIN SMALL LETTER P → LATIN SMALL 1D631 ; 0070 ; MA # ( 𝘱 → p ) MATHEMATICAL SANS-SERIF ITALIC SMALL P → LATIN SMALL LETTER P # 1D665 ; 0070 ; MA # ( 𝙥 → p ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P → LATIN SMALL LETTER P # 1D699 ; 0070 ; MA # ( 𝚙 → p ) MATHEMATICAL MONOSPACE SMALL P → LATIN SMALL LETTER P # +00FE ; 0070 ; MA # ( þ → p ) LATIN SMALL LETTER THORN → LATIN SMALL LETTER P # →ƿ→ +01BF ; 0070 ; MA # ( ƿ → p ) LATIN LETTER WYNN → LATIN SMALL LETTER P # 03C1 ; 0070 ; MA # ( ρ → p ) GREEK SMALL LETTER RHO → LATIN SMALL LETTER P # 03F1 ; 0070 ; MA # ( ϱ → p ) GREEK RHO SYMBOL → LATIN SMALL LETTER P # →ρ→ 1D6D2 ; 0070 ; MA # ( 𝛒 → p ) MATHEMATICAL BOLD SMALL RHO → LATIN SMALL LETTER P # →ρ→ @@ -3172,11 +3247,14 @@ FF50 ; 0070 ; MA # ( p → p ) FULLWIDTH LATIN SMALL LETTER P → LATIN SMALL 1D78E ; 0070 ; MA # ( 𝞎 → p ) MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL → LATIN SMALL LETTER P # →ρ→ 1D7BA ; 0070 ; MA # ( 𝞺 → p ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO → LATIN SMALL LETTER P # →ρ→ 1D7C8 ; 0070 ; MA # ( 𝟈 → p ) MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL → LATIN SMALL LETTER P # →ρ→ +03F8 ; 0070 ; MA # ( ϸ → p ) GREEK SMALL LETTER SHO → LATIN SMALL LETTER P # →þ→→ƿ→ 2CA3 ; 0070 ; MA # ( ⲣ → p ) COPTIC SMALL LETTER RO → LATIN SMALL LETTER P # →ρ→ +2CCF ; 0070 ; MA # ( ⳏ → p ) COPTIC SMALL LETTER OLD COPTIC HA → LATIN SMALL LETTER P # 0440 ; 0070 ; MA # ( р → p ) CYRILLIC SMALL LETTER ER → LATIN SMALL LETTER P # FF30 ; 0050 ; MA # ( P → P ) FULLWIDTH LATIN CAPITAL LETTER P → LATIN CAPITAL LETTER P # →Р→ 2119 ; 0050 ; MA # ( ℙ → P ) DOUBLE-STRUCK CAPITAL P → LATIN CAPITAL LETTER P # +1CCE5 ; 0050 ; MA #* ( 𜳥 → P ) OUTLINED LATIN CAPITAL LETTER P → LATIN CAPITAL LETTER P # 1D40F ; 0050 ; MA # ( 𝐏 → P ) MATHEMATICAL BOLD CAPITAL P → LATIN CAPITAL LETTER P # 1D443 ; 0050 ; MA # ( 𝑃 → P ) MATHEMATICAL ITALIC CAPITAL P → LATIN CAPITAL LETTER P # 1D477 ; 0050 ; MA # ( 𝑷 → P ) MATHEMATICAL BOLD ITALIC CAPITAL P → LATIN CAPITAL LETTER P # @@ -3196,6 +3274,7 @@ FF30 ; 0050 ; MA # ( P → P ) FULLWIDTH LATIN CAPITAL LETTER P → LATIN CAPI 1D766 ; 0050 ; MA # ( 𝝦 → P ) MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO → LATIN CAPITAL LETTER P # →Ρ→ 1D7A0 ; 0050 ; MA # ( 𝞠 → P ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO → LATIN CAPITAL LETTER P # →Ρ→ 2CA2 ; 0050 ; MA # ( Ⲣ → P ) COPTIC CAPITAL LETTER RO → LATIN CAPITAL LETTER P # +2CCE ; 0050 ; MA # ( Ⳏ → P ) COPTIC CAPITAL LETTER OLD COPTIC HA → LATIN CAPITAL LETTER P # 0420 ; 0050 ; MA # ( Р → P ) CYRILLIC CAPITAL LETTER ER → LATIN CAPITAL LETTER P # 13E2 ; 0050 ; MA # ( Ꮲ → P ) CHEROKEE LETTER TLV → LATIN CAPITAL LETTER P # 146D ; 0050 ; MA # ( ᑭ → P ) CANADIAN SYLLABICS KI → LATIN CAPITAL LETTER P # @@ -3226,6 +3305,8 @@ ABB2 ; 1D18 ; MA # ( ꮲ → ᴘ ) CHEROKEE SMALL LETTER TLV → LATIN LETTER SM 1D7BF ; 0278 ; MA # ( 𝞿 → ɸ ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI → LATIN SMALL LETTER PHI # →φ→ 1D7C7 ; 0278 ; MA # ( 𝟇 → ɸ ) MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL → LATIN SMALL LETTER PHI # →φ→ 2CAB ; 0278 ; MA # ( ⲫ → ɸ ) COPTIC SMALL LETTER FI → LATIN SMALL LETTER PHI # →ϕ→ +2CE1 ; 0278 ; MA # ( ⳡ → ɸ ) COPTIC SMALL LETTER OLD NUBIAN NYI → LATIN SMALL LETTER PHI # →φ→ +2CE0 ; 0278 ; MA # ( Ⳡ → ɸ ) COPTIC CAPITAL LETTER OLD NUBIAN NYI → LATIN SMALL LETTER PHI # →φ→ 0444 ; 0278 ; MA # ( ф → ɸ ) CYRILLIC SMALL LETTER EF → LATIN SMALL LETTER PHI # 1D42A ; 0071 ; MA # ( 𝐪 → q ) MATHEMATICAL BOLD SMALL Q → LATIN SMALL LETTER Q # @@ -3246,6 +3327,7 @@ ABB2 ; 1D18 ; MA # ( ꮲ → ᴘ ) CHEROKEE SMALL LETTER TLV → LATIN LETTER SM 0566 ; 0071 ; MA # ( զ → q ) ARMENIAN SMALL LETTER ZA → LATIN SMALL LETTER Q # 211A ; 0051 ; MA # ( ℚ → Q ) DOUBLE-STRUCK CAPITAL Q → LATIN CAPITAL LETTER Q # +1CCE6 ; 0051 ; MA #* ( 𜳦 → Q ) OUTLINED LATIN CAPITAL LETTER Q → LATIN CAPITAL LETTER Q # 1D410 ; 0051 ; MA # ( 𝐐 → Q ) MATHEMATICAL BOLD CAPITAL Q → LATIN CAPITAL LETTER Q # 1D444 ; 0051 ; MA # ( 𝑄 → Q ) MATHEMATICAL ITALIC CAPITAL Q → LATIN CAPITAL LETTER Q # 1D478 ; 0051 ; MA # ( 𝑸 → Q ) MATHEMATICAL BOLD ITALIC CAPITAL Q → LATIN CAPITAL LETTER Q # @@ -3311,6 +3393,7 @@ AB81 ; 0072 ; MA # ( ꮁ → r ) CHEROKEE SMALL LETTER HU → LATIN SMALL LETTER 211B ; 0052 ; MA # ( ℛ → R ) SCRIPT CAPITAL R → LATIN CAPITAL LETTER R # 211C ; 0052 ; MA # ( ℜ → R ) BLACK-LETTER CAPITAL R → LATIN CAPITAL LETTER R # 211D ; 0052 ; MA # ( ℝ → R ) DOUBLE-STRUCK CAPITAL R → LATIN CAPITAL LETTER R # +1CCE7 ; 0052 ; MA #* ( 𜳧 → R ) OUTLINED LATIN CAPITAL LETTER R → LATIN CAPITAL LETTER R # 1D411 ; 0052 ; MA # ( 𝐑 → R ) MATHEMATICAL BOLD CAPITAL R → LATIN CAPITAL LETTER R # 1D445 ; 0052 ; MA # ( 𝑅 → R ) MATHEMATICAL ITALIC CAPITAL R → LATIN CAPITAL LETTER R # 1D479 ; 0052 ; MA # ( 𝑹 → R ) MATHEMATICAL BOLD ITALIC CAPITAL R → LATIN CAPITAL LETTER R # @@ -3392,11 +3475,13 @@ FF53 ; 0073 ; MA # ( s → s ) FULLWIDTH LATIN SMALL LETTER S → LATIN SMALL A731 ; 0073 ; MA # ( ꜱ → s ) LATIN LETTER SMALL CAPITAL S → LATIN SMALL LETTER S # 01BD ; 0073 ; MA # ( ƽ → s ) LATIN SMALL LETTER TONE FIVE → LATIN SMALL LETTER S # 0455 ; 0073 ; MA # ( ѕ → s ) CYRILLIC SMALL LETTER DZE → LATIN SMALL LETTER S # +0D1F ; 0073 ; MA # ( ട → s ) MALAYALAM LETTER TTA → LATIN SMALL LETTER S # ABAA ; 0073 ; MA # ( ꮪ → s ) CHEROKEE SMALL LETTER DU → LATIN SMALL LETTER S # →ꜱ→ 118C1 ; 0073 ; MA # ( 𑣁 → s ) WARANG CITI SMALL LETTER A → LATIN SMALL LETTER S # 10448 ; 0073 ; MA # ( 𐑈 → s ) DESERET SMALL LETTER ZHEE → LATIN SMALL LETTER S # FF33 ; 0053 ; MA # ( S → S ) FULLWIDTH LATIN CAPITAL LETTER S → LATIN CAPITAL LETTER S # →Ѕ→ +1CCE8 ; 0053 ; MA #* ( 𜳨 → S ) OUTLINED LATIN CAPITAL LETTER S → LATIN CAPITAL LETTER S # 1D412 ; 0053 ; MA # ( 𝐒 → S ) MATHEMATICAL BOLD CAPITAL S → LATIN CAPITAL LETTER S # 1D446 ; 0053 ; MA # ( 𝑆 → S ) MATHEMATICAL ITALIC CAPITAL S → LATIN CAPITAL LETTER S # 1D47A ; 0053 ; MA # ( 𝑺 → S ) MATHEMATICAL BOLD ITALIC CAPITAL S → LATIN CAPITAL LETTER S # @@ -3424,6 +3509,8 @@ A4E2 ; 0053 ; MA # ( ꓢ → S ) LISU LETTER SA → LATIN CAPITAL LETTER S # 1D74 ; 0073 0334 ; MA # ( ᵴ → s̴ ) LATIN SMALL LETTER S WITH MIDDLE TILDE → LATIN SMALL LETTER S, COMBINING TILDE OVERLAY # A7B5 ; 00DF ; MA # ( ꞵ → ß ) LATIN SMALL LETTER BETA → LATIN SMALL LETTER SHARP S # →β→ +1E9E ; 00DF ; MA # ( ẞ → ß ) LATIN CAPITAL LETTER SHARP S → LATIN SMALL LETTER SHARP S # +A7D6 ; 00DF ; MA # ( Ꟗ → ß ) LATIN CAPITAL LETTER MIDDLE SCOTS S → LATIN SMALL LETTER SHARP S # →β→ 03B2 ; 00DF ; MA # ( β → ß ) GREEK SMALL LETTER BETA → LATIN SMALL LETTER SHARP S # 03D0 ; 00DF ; MA # ( ϐ → ß ) GREEK BETA SYMBOL → LATIN SMALL LETTER SHARP S # →β→ 1D6C3 ; 00DF ; MA # ( 𝛃 → ß ) MATHEMATICAL BOLD SMALL BETA → LATIN SMALL LETTER SHARP S # →β→ @@ -3474,6 +3561,7 @@ AB4D ; 0283 ; MA # ( ꭍ → ʃ ) LATIN SMALL LETTER BASELINE ESH → LATIN SMAL 27D9 ; 0054 ; MA #* ( ⟙ → T ) LARGE DOWN TACK → LATIN CAPITAL LETTER T # 1F768 ; 0054 ; MA #* ( 🝨 → T ) ALCHEMICAL SYMBOL FOR CRUCIBLE-4 → LATIN CAPITAL LETTER T # FF34 ; 0054 ; MA # ( T → T ) FULLWIDTH LATIN CAPITAL LETTER T → LATIN CAPITAL LETTER T # →Т→ +1CCE9 ; 0054 ; MA #* ( 𜳩 → T ) OUTLINED LATIN CAPITAL LETTER T → LATIN CAPITAL LETTER T # 1D413 ; 0054 ; MA # ( 𝐓 → T ) MATHEMATICAL BOLD CAPITAL T → LATIN CAPITAL LETTER T # 1D447 ; 0054 ; MA # ( 𝑇 → T ) MATHEMATICAL ITALIC CAPITAL T → LATIN CAPITAL LETTER T # 1D47B ; 0054 ; MA # ( 𝑻 → T ) MATHEMATICAL BOLD ITALIC CAPITAL T → LATIN CAPITAL LETTER T # @@ -3545,6 +3633,7 @@ A729 ; 0074 021D ; MA # ( ꜩ → tȝ ) LATIN SMALL LETTER TZ → LATIN SMALL LE 1D749 ; 1D1B ; MA # ( 𝝉 → ᴛ ) MATHEMATICAL BOLD ITALIC SMALL TAU → LATIN LETTER SMALL CAPITAL T # 1D783 ; 1D1B ; MA # ( 𝞃 → ᴛ ) MATHEMATICAL SANS-SERIF BOLD SMALL TAU → LATIN LETTER SMALL CAPITAL T # 1D7BD ; 1D1B ; MA # ( 𝞽 → ᴛ ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU → LATIN LETTER SMALL CAPITAL T # +2CA7 ; 1D1B ; MA # ( ⲧ → ᴛ ) COPTIC SMALL LETTER TAU → LATIN LETTER SMALL CAPITAL T # →т→ 0442 ; 1D1B ; MA # ( т → ᴛ ) CYRILLIC SMALL LETTER TE → LATIN LETTER SMALL CAPITAL T # AB72 ; 1D1B ; MA # ( ꭲ → ᴛ ) CHEROKEE SMALL LETTER I → LATIN LETTER SMALL CAPITAL T # @@ -3584,6 +3673,7 @@ AB52 ; 0075 ; MA # ( ꭒ → u ) LATIN SMALL LETTER U WITH LEFT HOOK → LATIN S 222A ; 0055 ; MA #* ( ∪ → U ) UNION → LATIN CAPITAL LETTER U # →ᑌ→ 22C3 ; 0055 ; MA #* ( ⋃ → U ) N-ARY UNION → LATIN CAPITAL LETTER U # →∪→→ᑌ→ +1CCEA ; 0055 ; MA #* ( 𜳪 → U ) OUTLINED LATIN CAPITAL LETTER U → LATIN CAPITAL LETTER U # 1D414 ; 0055 ; MA # ( 𝐔 → U ) MATHEMATICAL BOLD CAPITAL U → LATIN CAPITAL LETTER U # 1D448 ; 0055 ; MA # ( 𝑈 → U ) MATHEMATICAL ITALIC CAPITAL U → LATIN CAPITAL LETTER U # 1D47C ; 0055 ; MA # ( 𝑼 → U ) MATHEMATICAL BOLD ITALIC CAPITAL U → LATIN CAPITAL LETTER U # @@ -3609,6 +3699,8 @@ A4F4 ; 0055 ; MA # ( ꓴ → U ) LISU LETTER U → LATIN CAPITAL LETTER U # 01D3 ; 016C ; MA # ( Ǔ → Ŭ ) LATIN CAPITAL LETTER U WITH CARON → LATIN CAPITAL LETTER U WITH BREVE # +045F ; 0075 0329 ; MA # ( џ → u̩ ) CYRILLIC SMALL LETTER DZHE → LATIN SMALL LETTER U, COMBINING VERTICAL LINE BELOW # + 1D7E ; 0075 0335 ; MA # ( ᵾ → u̵ ) LATIN SMALL CAPITAL LETTER U WITH STROKE → LATIN SMALL LETTER U, COMBINING SHORT STROKE OVERLAY # →ᴜ̵→ AB9C ; 0075 0335 ; MA # ( ꮜ → u̵ ) CHEROKEE SMALL LETTER SA → LATIN SMALL LETTER U, COMBINING SHORT STROKE OVERLAY # →ᴜ̵→ @@ -3668,6 +3760,7 @@ ABA9 ; 0076 ; MA # ( ꮩ → v ) CHEROKEE SMALL LETTER DO → LATIN SMALL LETTER 0667 ; 0056 ; MA # ( ‎٧‎ → V ) ARABIC-INDIC DIGIT SEVEN → LATIN CAPITAL LETTER V # 06F7 ; 0056 ; MA # ( ۷ → V ) EXTENDED ARABIC-INDIC DIGIT SEVEN → LATIN CAPITAL LETTER V # →‎٧‎→ 2164 ; 0056 ; MA # ( Ⅴ → V ) ROMAN NUMERAL FIVE → LATIN CAPITAL LETTER V # +1CCEB ; 0056 ; MA #* ( 𜳫 → V ) OUTLINED LATIN CAPITAL LETTER V → LATIN CAPITAL LETTER V # 1D415 ; 0056 ; MA # ( 𝐕 → V ) MATHEMATICAL BOLD CAPITAL V → LATIN CAPITAL LETTER V # 1D449 ; 0056 ; MA # ( 𝑉 → V ) MATHEMATICAL ITALIC CAPITAL V → LATIN CAPITAL LETTER V # 1D47D ; 0056 ; MA # ( 𝑽 → V ) MATHEMATICAL BOLD ITALIC CAPITAL V → LATIN CAPITAL LETTER V # @@ -3712,10 +3805,12 @@ A4E6 ; 0056 ; MA # ( ꓦ → V ) LISU LETTER HA → LATIN CAPITAL LETTER V # 1F708 ; 0056 1DE4 ; MA #* ( 🜈 → Vᷤ ) ALCHEMICAL SYMBOL FOR AQUA VITAE → LATIN CAPITAL LETTER V, COMBINING LATIN SMALL LETTER S # 1D27 ; 028C ; MA # ( ᴧ → ʌ ) GREEK LETTER SMALL CAPITAL LAMDA → LATIN SMALL LETTER TURNED V # +2C97 ; 028C ; MA # ( ⲗ → ʌ ) COPTIC SMALL LETTER LAULA → LATIN SMALL LETTER TURNED V # 104D8 ; 028C ; MA # ( 𐓘 → ʌ ) OSAGE SMALL LETTER A → LATIN SMALL LETTER TURNED V # 0668 ; 0245 ; MA # ( ‎٨‎ → Ʌ ) ARABIC-INDIC DIGIT EIGHT → LATIN CAPITAL LETTER TURNED V # →Λ→ 06F8 ; 0245 ; MA # ( ۸ → Ʌ ) EXTENDED ARABIC-INDIC DIGIT EIGHT → LATIN CAPITAL LETTER TURNED V # →‎٨‎→→Λ→ +A7DA ; 0245 ; MA # ( Ꟛ → Ʌ ) LATIN CAPITAL LETTER LAMBDA → LATIN CAPITAL LETTER TURNED V # →Λ→ 039B ; 0245 ; MA # ( Λ → Ʌ ) GREEK CAPITAL LETTER LAMDA → LATIN CAPITAL LETTER TURNED V # 1D6B2 ; 0245 ; MA # ( 𝚲 → Ʌ ) MATHEMATICAL BOLD CAPITAL LAMDA → LATIN CAPITAL LETTER TURNED V # →Λ→ 1D6EC ; 0245 ; MA # ( 𝛬 → Ʌ ) MATHEMATICAL ITALIC CAPITAL LAMDA → LATIN CAPITAL LETTER TURNED V # →Λ→ @@ -3731,6 +3826,8 @@ A4E5 ; 0245 ; MA # ( ꓥ → Ʌ ) LISU LETTER NGA → LATIN CAPITAL LETTER TURNE 16F3D ; 0245 ; MA # ( 𖼽 → Ʌ ) MIAO LETTER ZZA → LATIN CAPITAL LETTER TURNED V # 1028D ; 0245 ; MA # ( 𐊍 → Ʌ ) LYCIAN LETTER L → LATIN CAPITAL LETTER TURNED V # →Λ→ +A7DC ; 0245 0338 ; MA # ( Ƛ → Ʌ̸ ) LATIN CAPITAL LETTER LAMBDA WITH STROKE → LATIN CAPITAL LETTER TURNED V, COMBINING LONG SOLIDUS OVERLAY # →Λ̷→ + 04C5 ; 0245 0326 ; MA # ( Ӆ → Ʌ̦ ) CYRILLIC CAPITAL LETTER EL WITH TAIL → LATIN CAPITAL LETTER TURNED V, COMBINING COMMA BELOW # →Л̡→ 143D ; 0245 00B7 ; MA # ( ᐽ → Ʌ· ) CANADIAN SYLLABICS WEST-CREE PWI → LATIN CAPITAL LETTER TURNED V, MIDDLE DOT # →ᐱᐧ→→ᐱ·→ @@ -3750,7 +3847,9 @@ A4E5 ; 0245 ; MA # ( ꓥ → Ʌ ) LISU LETTER NGA → LATIN CAPITAL LETTER TURNE 1D66C ; 0077 ; MA # ( 𝙬 → w ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W → LATIN SMALL LETTER W # 1D6A0 ; 0077 ; MA # ( 𝚠 → w ) MATHEMATICAL MONOSPACE SMALL W → LATIN SMALL LETTER W # 1D21 ; 0077 ; MA # ( ᴡ → w ) LATIN LETTER SMALL CAPITAL W → LATIN SMALL LETTER W # +2CBD ; 0077 ; MA # ( ⲽ → w ) COPTIC SMALL LETTER CRYPTOGRAMMIC NI → LATIN SMALL LETTER W # →ш→ 0461 ; 0077 ; MA # ( ѡ → w ) CYRILLIC SMALL LETTER OMEGA → LATIN SMALL LETTER W # +0448 ; 0077 ; MA # ( ш → w ) CYRILLIC SMALL LETTER SHA → LATIN SMALL LETTER W # 051D ; 0077 ; MA # ( ԝ → w ) CYRILLIC SMALL LETTER WE → LATIN SMALL LETTER W # 0561 ; 0077 ; MA # ( ա → w ) ARMENIAN SMALL LETTER AYB → LATIN SMALL LETTER W # →ɯ→ 1170A ; 0077 ; MA # ( 𑜊 → w ) AHOM LETTER JA → LATIN SMALL LETTER W # @@ -3758,8 +3857,9 @@ A4E5 ; 0245 ; MA # ( ꓥ → Ʌ ) LISU LETTER NGA → LATIN CAPITAL LETTER TURNE 1170F ; 0077 ; MA # ( 𑜏 → w ) AHOM LETTER SA → LATIN SMALL LETTER W # AB83 ; 0077 ; MA # ( ꮃ → w ) CHEROKEE SMALL LETTER LA → LATIN SMALL LETTER W # →ᴡ→ -118EF ; 0057 ; MA #* ( 𑣯 → W ) WARANG CITI NUMBER SIXTY → LATIN CAPITAL LETTER W # 118E6 ; 0057 ; MA # ( 𑣦 → W ) WARANG CITI DIGIT SIX → LATIN CAPITAL LETTER W # +118EF ; 0057 ; MA #* ( 𑣯 → W ) WARANG CITI NUMBER SIXTY → LATIN CAPITAL LETTER W # +1CCEC ; 0057 ; MA #* ( 𜳬 → W ) OUTLINED LATIN CAPITAL LETTER W → LATIN CAPITAL LETTER W # 1D416 ; 0057 ; MA # ( 𝐖 → W ) MATHEMATICAL BOLD CAPITAL W → LATIN CAPITAL LETTER W # 1D44A ; 0057 ; MA # ( 𝑊 → W ) MATHEMATICAL ITALIC CAPITAL W → LATIN CAPITAL LETTER W # 1D47E ; 0057 ; MA # ( 𝑾 → W ) MATHEMATICAL BOLD ITALIC CAPITAL W → LATIN CAPITAL LETTER W # @@ -3787,6 +3887,7 @@ A4EA ; 0057 ; MA # ( ꓪ → W ) LISU LETTER WA → LATIN CAPITAL LETTER W # A761 ; 0077 0326 ; MA # ( ꝡ → w̦ ) LATIN SMALL LETTER VY → LATIN SMALL LETTER W, COMBINING COMMA BELOW # →w̡→ 1D0D ; 028D ; MA # ( ᴍ → ʍ ) LATIN LETTER SMALL CAPITAL M → LATIN SMALL LETTER TURNED W # →м→ +2C99 ; 028D ; MA # ( ⲙ → ʍ ) COPTIC SMALL LETTER MI → LATIN SMALL LETTER TURNED W # →ᴍ→→м→ 043C ; 028D ; MA # ( м → ʍ ) CYRILLIC SMALL LETTER EM → LATIN SMALL LETTER TURNED W # AB87 ; 028D ; MA # ( ꮇ → ʍ ) CHEROKEE SMALL LETTER LU → LATIN SMALL LETTER TURNED W # →ᴍ→→м→ @@ -3824,6 +3925,7 @@ FF58 ; 0078 ; MA # ( x → x ) FULLWIDTH LATIN SMALL LETTER X → LATIN SMALL 118EC ; 0058 ; MA #* ( 𑣬 → X ) WARANG CITI NUMBER THIRTY → LATIN CAPITAL LETTER X # FF38 ; 0058 ; MA # ( X → X ) FULLWIDTH LATIN CAPITAL LETTER X → LATIN CAPITAL LETTER X # →Х→ 2169 ; 0058 ; MA # ( Ⅹ → X ) ROMAN NUMERAL TEN → LATIN CAPITAL LETTER X # +1CCED ; 0058 ; MA #* ( 𜳭 → X ) OUTLINED LATIN CAPITAL LETTER X → LATIN CAPITAL LETTER X # 1D417 ; 0058 ; MA # ( 𝐗 → X ) MATHEMATICAL BOLD CAPITAL X → LATIN CAPITAL LETTER X # 1D44B ; 0058 ; MA # ( 𝑋 → X ) MATHEMATICAL ITALIC CAPITAL X → LATIN CAPITAL LETTER X # 1D47F ; 0058 ; MA # ( 𝑿 → X ) MATHEMATICAL BOLD ITALIC CAPITAL X → LATIN CAPITAL LETTER X # @@ -3894,12 +3996,14 @@ AB5A ; 0079 ; MA # ( ꭚ → y ) LATIN SMALL LETTER Y WITH SHORT RIGHT LEG → L 1D738 ; 0079 ; MA # ( 𝜸 → y ) MATHEMATICAL BOLD ITALIC SMALL GAMMA → LATIN SMALL LETTER Y # →γ→ 1D772 ; 0079 ; MA # ( 𝝲 → y ) MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA → LATIN SMALL LETTER Y # →γ→ 1D7AC ; 0079 ; MA # ( 𝞬 → y ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA → LATIN SMALL LETTER Y # →γ→ +2CA9 ; 0079 ; MA # ( ⲩ → y ) COPTIC SMALL LETTER UA → LATIN SMALL LETTER Y # →γ→ 0443 ; 0079 ; MA # ( у → y ) CYRILLIC SMALL LETTER U → LATIN SMALL LETTER Y # 04AF ; 0079 ; MA # ( ү → y ) CYRILLIC SMALL LETTER STRAIGHT U → LATIN SMALL LETTER Y # →γ→ 10E7 ; 0079 ; MA # ( ყ → y ) GEORGIAN LETTER QAR → LATIN SMALL LETTER Y # 118DC ; 0079 ; MA # ( 𑣜 → y ) WARANG CITI SMALL LETTER HAR → LATIN SMALL LETTER Y # →ɣ→→γ→ FF39 ; 0059 ; MA # ( Y → Y ) FULLWIDTH LATIN CAPITAL LETTER Y → LATIN CAPITAL LETTER Y # →Υ→ +1CCEE ; 0059 ; MA #* ( 𜳮 → Y ) OUTLINED LATIN CAPITAL LETTER Y → LATIN CAPITAL LETTER Y # 1D418 ; 0059 ; MA # ( 𝐘 → Y ) MATHEMATICAL BOLD CAPITAL Y → LATIN CAPITAL LETTER Y # 1D44C ; 0059 ; MA # ( 𝑌 → Y ) MATHEMATICAL ITALIC CAPITAL Y → LATIN CAPITAL LETTER Y # 1D480 ; 0059 ; MA # ( 𝒀 → Y ) MATHEMATICAL BOLD ITALIC CAPITAL Y → LATIN CAPITAL LETTER Y # @@ -3941,6 +4045,7 @@ A4EC ; 0059 ; MA # ( ꓬ → Y ) LISU LETTER YA → LATIN CAPITAL LETTER Y # 0292 ; 021D ; MA # ( ʒ → ȝ ) LATIN SMALL LETTER EZH → LATIN SMALL LETTER YOGH # A76B ; 021D ; MA # ( ꝫ → ȝ ) LATIN SMALL LETTER ET → LATIN SMALL LETTER YOGH # +2CC5 ; 021D ; MA # ( ⳅ → ȝ ) COPTIC SMALL LETTER OLD COPTIC SHEI → LATIN SMALL LETTER YOGH # →ʒ→ 2CCD ; 021D ; MA # ( ⳍ → ȝ ) COPTIC SMALL LETTER OLD COPTIC HORI → LATIN SMALL LETTER YOGH # 04E1 ; 021D ; MA # ( ӡ → ȝ ) CYRILLIC SMALL LETTER ABKHASIAN DZE → LATIN SMALL LETTER YOGH # →ʒ→ 10F3 ; 021D ; MA # ( ჳ → ȝ ) GEORGIAN LETTER WE → LATIN SMALL LETTER YOGH # →ʒ→ @@ -3962,11 +4067,12 @@ A76B ; 021D ; MA # ( ꝫ → ȝ ) LATIN SMALL LETTER ET → LATIN SMALL LETTER Y AB93 ; 007A ; MA # ( ꮓ → z ) CHEROKEE SMALL LETTER NO → LATIN SMALL LETTER Z # →ᴢ→ 118C4 ; 007A ; MA # ( 𑣄 → z ) WARANG CITI SMALL LETTER YA → LATIN SMALL LETTER Z # -102F5 ; 005A ; MA #* ( 𐋵 → Z ) COPTIC EPACT NUMBER THREE HUNDRED → LATIN CAPITAL LETTER Z # 118E5 ; 005A ; MA # ( 𑣥 → Z ) WARANG CITI DIGIT FIVE → LATIN CAPITAL LETTER Z # +102F5 ; 005A ; MA #* ( 𐋵 → Z ) COPTIC EPACT NUMBER THREE HUNDRED → LATIN CAPITAL LETTER Z # FF3A ; 005A ; MA # ( Z → Z ) FULLWIDTH LATIN CAPITAL LETTER Z → LATIN CAPITAL LETTER Z # →Ζ→ 2124 ; 005A ; MA # ( ℤ → Z ) DOUBLE-STRUCK CAPITAL Z → LATIN CAPITAL LETTER Z # 2128 ; 005A ; MA # ( ℨ → Z ) BLACK-LETTER CAPITAL Z → LATIN CAPITAL LETTER Z # +1CCEF ; 005A ; MA #* ( 𜳯 → Z ) OUTLINED LATIN CAPITAL LETTER Z → LATIN CAPITAL LETTER Z # 1D419 ; 005A ; MA # ( 𝐙 → Z ) MATHEMATICAL BOLD CAPITAL Z → LATIN CAPITAL LETTER Z # 1D44D ; 005A ; MA # ( 𝑍 → Z ) MATHEMATICAL ITALIC CAPITAL Z → LATIN CAPITAL LETTER Z # 1D481 ; 005A ; MA # ( 𝒁 → Z ) MATHEMATICAL BOLD ITALIC CAPITAL Z → LATIN CAPITAL LETTER Z # @@ -4000,12 +4106,19 @@ A4DC ; 005A ; MA # ( ꓜ → Z ) LISU LETTER DZA → LATIN CAPITAL LETTER Z # 1D76 ; 007A 0334 ; MA # ( ᵶ → z̴ ) LATIN SMALL LETTER Z WITH MIDDLE TILDE → LATIN SMALL LETTER Z, COMBINING TILDE OVERLAY # -01BF ; 00FE ; MA # ( ƿ → þ ) LATIN LETTER WYNN → LATIN SMALL LETTER THORN # -03F8 ; 00FE ; MA # ( ϸ → þ ) GREEK SMALL LETTER SHO → LATIN SMALL LETTER THORN # +2C8D ; 2C6C ; MA # ( ⲍ → ⱬ ) COPTIC SMALL LETTER ZATA → LATIN SMALL LETTER Z WITH DESCENDER # + +2C8C ; 2C6B ; MA # ( Ⲍ → Ⱬ ) COPTIC CAPITAL LETTER ZATA → LATIN CAPITAL LETTER Z WITH DESCENDER # + +2C9D ; 0293 ; MA # ( ⲝ → ʓ ) COPTIC SMALL LETTER KSI → LATIN SMALL LETTER EZH WITH CURL # 03F7 ; 00DE ; MA # ( Ϸ → Þ ) GREEK CAPITAL LETTER SHO → LATIN CAPITAL LETTER THORN # 104C4 ; 00DE ; MA # ( 𐓄 → Þ ) OSAGE CAPITAL LETTER PA → LATIN CAPITAL LETTER THORN # +A7D2 ; A7D3 ; MA # ( ꟒ → ꟓ ) LATIN CAPITAL LETTER DOUBLE THORN → LATIN SMALL LETTER DOUBLE THORN # + +A7D4 ; A7D5 ; MA # ( ꟔ → ꟕ ) LATIN CAPITAL LETTER DOUBLE WYNN → LATIN SMALL LETTER DOUBLE WYNN # + 2079 ; A770 ; MA #* ( ⁹ → ꝰ ) SUPERSCRIPT NINE → MODIFIER LETTER US # 1D24 ; 01A8 ; MA # ( ᴤ → ƨ ) LATIN LETTER VOICED LARYNGEAL SPIRANT → LATIN SMALL LETTER TONE TWO # @@ -4014,6 +4127,7 @@ A645 ; 01A8 ; MA # ( ꙅ → ƨ ) CYRILLIC SMALL LETTER REVERSED DZE → LATIN S 044C ; 0185 ; MA # ( ь → ƅ ) CYRILLIC SMALL LETTER SOFT SIGN → LATIN SMALL LETTER TONE SIX # AB9F ; 0185 ; MA # ( ꮟ → ƅ ) CHEROKEE SMALL LETTER SI → LATIN SMALL LETTER TONE SIX # →ь→ +16ED1 ; 0185 ; MA # ( 𖻑 → ƅ ) BERIA ERFE SMALL LETTER UI → LATIN SMALL LETTER TONE SIX # →ь→ 044B ; 0185 0069 ; MA # ( ы → ƅi ) CYRILLIC SMALL LETTER YERU → LATIN SMALL LETTER TONE SIX, LATIN SMALL LETTER I # →ьı→ @@ -4023,6 +4137,8 @@ AB7E ; 0242 ; MA # ( ꭾ → ɂ ) CHEROKEE SMALL LETTER HE → LATIN SMALL LETTE A6CD ; 02A1 ; MA # ( ꛍ → ʡ ) BAMUM LETTER LU → LATIN LETTER GLOTTAL STOP WITH STROKE # +256A ; 01C2 ; MA #* ( ╪ → ǂ ) BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE → LATIN LETTER ALVEOLAR CLICK # + 2299 ; 0298 ; MA #* ( ⊙ → ʘ ) CIRCLED DOT OPERATOR → LATIN LETTER BILABIAL CLICK # 2609 ; 0298 ; MA #* ( ☉ → ʘ ) SUN → LATIN LETTER BILABIAL CLICK # →⊙→ 2A00 ; 0298 ; MA #* ( ⨀ → ʘ ) N-ARY CIRCLED DOT OPERATOR → LATIN LETTER BILABIAL CLICK # →⊙→ @@ -4079,6 +4195,7 @@ A668 ; 0298 ; MA # ( Ꙩ → ʘ ) CYRILLIC CAPITAL LETTER MONOCULAR O → LATIN 2CE4 ; 03D7 ; MA # ( ⳤ → ϗ ) COPTIC SYMBOL KAI → GREEK KAI SYMBOL # +A7DB ; 03BB ; MA # ( ꟛ → λ ) LATIN SMALL LETTER LAMBDA → GREEK SMALL LETTER LAMDA # 1D6CC ; 03BB ; MA # ( 𝛌 → λ ) MATHEMATICAL BOLD SMALL LAMDA → GREEK SMALL LETTER LAMDA # 1D706 ; 03BB ; MA # ( 𝜆 → λ ) MATHEMATICAL ITALIC SMALL LAMDA → GREEK SMALL LETTER LAMDA # 1D740 ; 03BB ; MA # ( 𝝀 → λ ) MATHEMATICAL BOLD ITALIC SMALL LAMDA → GREEK SMALL LETTER LAMDA # @@ -4087,6 +4204,8 @@ A668 ; 0298 ; MA # ( Ꙩ → ʘ ) CYRILLIC CAPITAL LETTER MONOCULAR O → LATIN 2C96 ; 03BB ; MA # ( Ⲗ → λ ) COPTIC CAPITAL LETTER LAULA → GREEK SMALL LETTER LAMDA # 104DB ; 03BB ; MA # ( 𐓛 → λ ) OSAGE SMALL LETTER AH → GREEK SMALL LETTER LAMDA # +019B ; 03BB 0338 ; MA # ( ƛ → λ̸ ) LATIN SMALL LETTER LAMBDA WITH STROKE → GREEK SMALL LETTER LAMDA, COMBINING LONG SOLIDUS OVERLAY # →λ̷→ + 00B5 ; 03BC ; MA # ( µ → μ ) MICRO SIGN → GREEK SMALL LETTER MU # 1D6CD ; 03BC ; MA # ( 𝛍 → μ ) MATHEMATICAL BOLD SMALL MU → GREEK SMALL LETTER MU # 1D707 ; 03BC ; MA # ( 𝜇 → μ ) MATHEMATICAL ITALIC SMALL MU → GREEK SMALL LETTER MU # @@ -4100,11 +4219,13 @@ A668 ; 0298 ; MA # ( Ꙩ → ʘ ) CYRILLIC CAPITAL LETTER MONOCULAR O → LATIN 1D77D ; 03BE ; MA # ( 𝝽 → ξ ) MATHEMATICAL SANS-SERIF BOLD SMALL XI → GREEK SMALL LETTER XI # 1D7B7 ; 03BE ; MA # ( 𝞷 → ξ ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI → GREEK SMALL LETTER XI # +2630 ; 039E ; MA #* ( ☰ → Ξ ) TRIGRAM FOR HEAVEN → GREEK CAPITAL LETTER XI # →Ⲷ→ 1D6B5 ; 039E ; MA # ( 𝚵 → Ξ ) MATHEMATICAL BOLD CAPITAL XI → GREEK CAPITAL LETTER XI # 1D6EF ; 039E ; MA # ( 𝛯 → Ξ ) MATHEMATICAL ITALIC CAPITAL XI → GREEK CAPITAL LETTER XI # 1D729 ; 039E ; MA # ( 𝜩 → Ξ ) MATHEMATICAL BOLD ITALIC CAPITAL XI → GREEK CAPITAL LETTER XI # 1D763 ; 039E ; MA # ( 𝝣 → Ξ ) MATHEMATICAL SANS-SERIF BOLD CAPITAL XI → GREEK CAPITAL LETTER XI # 1D79D ; 039E ; MA # ( 𝞝 → Ξ ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI → GREEK CAPITAL LETTER XI # +2CB6 ; 039E ; MA # ( Ⲷ → Ξ ) COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE → GREEK CAPITAL LETTER XI # 03D6 ; 03C0 ; MA # ( ϖ → π ) GREEK PI SYMBOL → GREEK SMALL LETTER PI # 213C ; 03C0 ; MA # ( ℼ → π ) DOUBLE-STRUCK SMALL PI → GREEK SMALL LETTER PI # @@ -4119,7 +4240,9 @@ A668 ; 0298 ; MA # ( Ꙩ → ʘ ) CYRILLIC CAPITAL LETTER MONOCULAR O → LATIN 1D7B9 ; 03C0 ; MA # ( 𝞹 → π ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI → GREEK SMALL LETTER PI # 1D7C9 ; 03C0 ; MA # ( 𝟉 → π ) MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL → GREEK SMALL LETTER PI # 1D28 ; 03C0 ; MA # ( ᴨ → π ) GREEK LETTER SMALL CAPITAL PI → GREEK SMALL LETTER PI # →п→ +2CA1 ; 03C0 ; MA # ( ⲡ → π ) COPTIC SMALL LETTER PI → GREEK SMALL LETTER PI # →п→ 043F ; 03C0 ; MA # ( п → π ) CYRILLIC SMALL LETTER PE → GREEK SMALL LETTER PI # +16EC1 ; 03C0 ; MA # ( 𖻁 → π ) BERIA ERFE SMALL LETTER HIRDEABO → GREEK SMALL LETTER PI # →п→ 220F ; 03A0 ; MA #* ( ∏ → Π ) N-ARY PRODUCT → GREEK CAPITAL LETTER PI # 213F ; 03A0 ; MA # ( ℿ → Π ) DOUBLE-STRUCK CAPITAL PI → GREEK CAPITAL LETTER PI # @@ -4131,16 +4254,20 @@ A668 ; 0298 ; MA # ( Ꙩ → ʘ ) CYRILLIC CAPITAL LETTER MONOCULAR O → LATIN 2CA0 ; 03A0 ; MA # ( Ⲡ → Π ) COPTIC CAPITAL LETTER PI → GREEK CAPITAL LETTER PI # 041F ; 03A0 ; MA # ( П → Π ) CYRILLIC CAPITAL LETTER PE → GREEK CAPITAL LETTER PI # A6DB ; 03A0 ; MA # ( ꛛ → Π ) BAMUM LETTER NA → GREEK CAPITAL LETTER PI # +16EA6 ; 03A0 ; MA # ( 𖺦 → Π ) BERIA ERFE CAPITAL LETTER HIRDEABO → GREEK CAPITAL LETTER PI # →П→ 102AD ; 03D8 ; MA # ( 𐊭 → Ϙ ) CARIAN LETTER T → GREEK LETTER ARCHAIC KOPPA # 10312 ; 03D8 ; MA # ( 𐌒 → Ϙ ) OLD ITALIC LETTER KU → GREEK LETTER ARCHAIC KOPPA # +2CC1 ; 03FC ; MA # ( ⳁ → ϼ ) COPTIC SMALL LETTER SAMPI → GREEK RHO WITH STROKE SYMBOL # + 03DB ; 03C2 ; MA # ( ϛ → ς ) GREEK SMALL LETTER STIGMA → GREEK SMALL LETTER FINAL SIGMA # 1D6D3 ; 03C2 ; MA # ( 𝛓 → ς ) MATHEMATICAL BOLD SMALL FINAL SIGMA → GREEK SMALL LETTER FINAL SIGMA # 1D70D ; 03C2 ; MA # ( 𝜍 → ς ) MATHEMATICAL ITALIC SMALL FINAL SIGMA → GREEK SMALL LETTER FINAL SIGMA # 1D747 ; 03C2 ; MA # ( 𝝇 → ς ) MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA → GREEK SMALL LETTER FINAL SIGMA # 1D781 ; 03C2 ; MA # ( 𝞁 → ς ) MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA → GREEK SMALL LETTER FINAL SIGMA # 1D7BB ; 03C2 ; MA # ( 𝞻 → ς ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA → GREEK SMALL LETTER FINAL SIGMA # +2C8B ; 03C2 ; MA # ( ⲋ → ς ) COPTIC SMALL LETTER SOU → GREEK SMALL LETTER FINAL SIGMA # 1D6BD ; 03A6 ; MA # ( 𝚽 → Φ ) MATHEMATICAL BOLD CAPITAL PHI → GREEK CAPITAL LETTER PHI # 1D6F7 ; 03A6 ; MA # ( 𝛷 → Φ ) MATHEMATICAL ITALIC CAPITAL PHI → GREEK CAPITAL LETTER PHI # @@ -4168,6 +4295,7 @@ AB55 ; 03C7 ; MA # ( ꭕ → χ ) LATIN SMALL LETTER CHI WITH LOW LEFT SERIF → 1D74D ; 03C8 ; MA # ( 𝝍 → ψ ) MATHEMATICAL BOLD ITALIC SMALL PSI → GREEK SMALL LETTER PSI # 1D787 ; 03C8 ; MA # ( 𝞇 → ψ ) MATHEMATICAL SANS-SERIF BOLD SMALL PSI → GREEK SMALL LETTER PSI # 1D7C1 ; 03C8 ; MA # ( 𝟁 → ψ ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI → GREEK SMALL LETTER PSI # +2CAF ; 03C8 ; MA # ( ⲯ → ψ ) COPTIC SMALL LETTER PSI → GREEK SMALL LETTER PSI # 0471 ; 03C8 ; MA # ( ѱ → ψ ) CYRILLIC SMALL LETTER PSI → GREEK SMALL LETTER PSI # 104F9 ; 03C8 ; MA # ( 𐓹 → ψ ) OSAGE SMALL LETTER GHA → GREEK SMALL LETTER PSI # @@ -4206,10 +4334,6 @@ A64D ; 03C9 ; MA # ( ꙍ → ω ) CYRILLIC SMALL LETTER BROAD OMEGA → GREEK SM 1F7D ; 1FF4 ; MA # ( ώ → ῴ ) GREEK SMALL LETTER OMEGA WITH OXIA → GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI # -2630 ; 2CB6 ; MA #* ( ☰ → Ⲷ ) TRIGRAM FOR HEAVEN → COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE # - -2CDC ; 03EC ; MA # ( Ⳝ → Ϭ ) COPTIC CAPITAL LETTER OLD NUBIAN SHIMA → COPTIC CAPITAL LETTER SHIMA # - 0497 ; 0436 0329 ; MA # ( җ → ж̩ ) CYRILLIC SMALL LETTER ZHE WITH DESCENDER → CYRILLIC SMALL LETTER ZHE, COMBINING VERTICAL LINE BELOW # 0496 ; 0416 0329 ; MA # ( Җ → Ж̩ ) CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER → CYRILLIC CAPITAL LETTER ZHE, COMBINING VERTICAL LINE BELOW # @@ -4252,6 +4376,13 @@ AB60 ; 0459 ; MA # ( ꭠ → љ ) LATIN SMALL LETTER SAKHA YAT → CYRILLIC SMAL 18ED ; 0460 00B7 ; MA # ( ᣭ → Ѡ· ) CANADIAN SYLLABICS CARRIER GWU → CYRILLIC CAPITAL LETTER OMEGA, MIDDLE DOT # →ᗯᐧ→ A7B6 ; A64C ; MA # ( Ꞷ → Ꙍ ) LATIN CAPITAL LETTER OMEGA → CYRILLIC CAPITAL LETTER BROAD OMEGA # +2CB0 ; A64C ; MA # ( Ⲱ → Ꙍ ) COPTIC CAPITAL LETTER OOU → CYRILLIC CAPITAL LETTER BROAD OMEGA # + +0AEB ; 0447 ; MA # ( ૫ → ч ) GUJARATI DIGIT FIVE → CYRILLIC SMALL LETTER CHE # +03E5 ; 0447 ; MA # ( ϥ → ч ) COPTIC SMALL LETTER FEI → CYRILLIC SMALL LETTER CHE # +0AAA ; 0447 ; MA # ( પ → ч ) GUJARATI LETTER PA → CYRILLIC SMALL LETTER CHE # →૫→ + +03E4 ; 0427 ; MA # ( Ϥ → Ч ) COPTIC CAPITAL LETTER FEI → CYRILLIC CAPITAL LETTER CHE # 04CC ; 04B7 ; MA # ( ӌ → ҷ ) CYRILLIC SMALL LETTER KHAKASSIAN CHE → CYRILLIC SMALL LETTER CHE WITH DESCENDER # @@ -4259,8 +4390,6 @@ A7B6 ; A64C ; MA # ( Ꞷ → Ꙍ ) LATIN CAPITAL LETTER OMEGA → CYRILLIC CAPIT 04BE ; 04BC 0328 ; MA # ( Ҿ → Ҽ̨ ) CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER → CYRILLIC CAPITAL LETTER ABKHASIAN CHE, COMBINING OGONEK # -2CBD ; 0448 ; MA # ( ⲽ → ш ) COPTIC SMALL LETTER CRYPTOGRAMMIC NI → CYRILLIC SMALL LETTER SHA # - 2CBC ; 0428 ; MA # ( Ⲽ → Ш ) COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI → CYRILLIC CAPITAL LETTER SHA # A650 ; 042A 006C ; MA # ( Ꙑ → Ъl ) CYRILLIC CAPITAL LETTER YERU WITH BACK YER → CYRILLIC CAPITAL LETTER HARD SIGN, LATIN SMALL LETTER L # →ЪІ→ @@ -4272,7 +4401,7 @@ A650 ; 042A 006C ; MA # ( Ꙑ → Ъl ) CYRILLIC CAPITAL LETTER YERU WITH BACK Y A992 ; 2C3F ; MA # ( ꦒ → ⰿ ) JAVANESE LETTER GA → GLAGOLITIC SMALL LETTER MYSLITE # -0587 ; 0565 0582 ; MA # ( և → եւ ) ARMENIAN SMALL LIGATURE ECH YIWN → ARMENIAN SMALL LETTER ECH, ARMENIAN SMALL LETTER YIWN # +0587 ; 0565 0069 ; MA # ( և → եi ) ARMENIAN SMALL LIGATURE ECH YIWN → ARMENIAN SMALL LETTER ECH, LATIN SMALL LETTER I # →եւ→ 1294 ; 0571 ; MA # ( ኔ → ձ ) ETHIOPIC SYLLABLE NEE → ARMENIAN SMALL LETTER JA # @@ -4297,7 +4426,10 @@ A4F5 ; 0548 ; MA # ( ꓵ → Ո ) LISU LETTER UE → ARMENIAN CAPITAL LETTER VO FB16 ; 057E 0576 ; MA # ( ﬖ → վն ) ARMENIAN SMALL LIGATURE VEW NOW → ARMENIAN SMALL LETTER VEW, ARMENIAN SMALL LETTER NOW # +2CE8 ; 0554 ; MA #* ( ⳨ → Ք ) COPTIC SYMBOL TAU RO → ARMENIAN CAPITAL LETTER KEH # →₽→ +101A0 ; 0554 ; MA #* ( 𐆠 → Ք ) GREEK SYMBOL TAU RHO → ARMENIAN CAPITAL LETTER KEH # →⳨→→₽→ 20BD ; 0554 ; MA #* ( ₽ → Ք ) RUBLE SIGN → ARMENIAN CAPITAL LETTER KEH # +2CC0 ; 0554 ; MA # ( Ⳁ → Ք ) COPTIC CAPITAL LETTER SAMPI → ARMENIAN CAPITAL LETTER KEH # →₽→ 02D3 ; 0559 ; MA #* ( ˓ → ՙ ) MODIFIER LETTER CENTRED LEFT HALF RING → ARMENIAN MODIFIER LETTER LEFT HALF RING # 02BF ; 0559 ; MA # ( ʿ → ՙ ) MODIFIER LETTER LEFT HALF RING → ARMENIAN MODIFIER LETTER LEFT HALF RING # @@ -4340,7 +4472,7 @@ FB28 ; 05EA ; MA # ( ‎ﬨ‎ → ‎ת‎ ) HEBREW LETTER WIDE TAV → HEBREW FE80 ; 0621 ; MA # ( ‎ﺀ‎ → ‎ء‎ ) ARABIC LETTER HAMZA ISOLATED FORM → ARABIC LETTER HAMZA # -06FD ; 0621 0348 ; MA #* ( ‎۽‎ → ‎ء͈‎ ) ARABIC SIGN SINDHI AMPERSAND → ARABIC LETTER HAMZA, COMBINING DOUBLE VERTICAL LINE BELOW # +06FD ; 0621 10EFA ; MA #* ( ‎۽‎ → ‎ء𐻺‎ ) ARABIC SIGN SINDHI AMPERSAND → ARABIC LETTER HAMZA, ARABIC DOUBLE VERTICAL BAR BELOW # FE82 ; 0622 ; MA # ( ‎ﺂ‎ → ‎آ‎ ) ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM → ARABIC LETTER ALEF WITH MADDA ABOVE # FE81 ; 0622 ; MA # ( ‎ﺁ‎ → ‎آ‎ ) ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM → ARABIC LETTER ALEF WITH MADDA ABOVE # @@ -4412,6 +4544,7 @@ FB5C ; 0680 ; MA # ( ‎ﭜ‎ → ‎ڀ‎ ) ARABIC LETTER BEHEH INITIAL FORM FB5D ; 0680 ; MA # ( ‎ﭝ‎ → ‎ڀ‎ ) ARABIC LETTER BEHEH MEDIAL FORM → ARABIC LETTER BEHEH # FB5B ; 0680 ; MA # ( ‎ﭛ‎ → ‎ڀ‎ ) ARABIC LETTER BEHEH FINAL FORM → ARABIC LETTER BEHEH # FB5A ; 0680 ; MA # ( ‎ﭚ‎ → ‎ڀ‎ ) ARABIC LETTER BEHEH ISOLATED FORM → ARABIC LETTER BEHEH # +10EC7 ; 0680 ; MA # ( ‎𐻇‎ → ‎ڀ‎ ) ARABIC LETTER YEH WITH FOUR DOTS BELOW → ARABIC LETTER BEHEH # 08A9 ; 0754 ; MA # ( ‎ࢩ‎ → ‎ݔ‎ ) ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE → ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE # 0767 ; 0754 ; MA # ( ‎ݧ‎ → ‎ݔ‎ ) ARABIC LETTER NOON WITH TWO DOTS BELOW → ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE # @@ -4431,6 +4564,13 @@ FE97 ; 062A ; MA # ( ‎ﺗ‎ → ‎ت‎ ) ARABIC LETTER TEH INITIAL FORM → FE98 ; 062A ; MA # ( ‎ﺘ‎ → ‎ت‎ ) ARABIC LETTER TEH MEDIAL FORM → ARABIC LETTER TEH # FE96 ; 062A ; MA # ( ‎ﺖ‎ → ‎ت‎ ) ARABIC LETTER TEH FINAL FORM → ARABIC LETTER TEH # FE95 ; 062A ; MA # ( ‎ﺕ‎ → ‎ت‎ ) ARABIC LETTER TEH ISOLATED FORM → ARABIC LETTER TEH # +067A ; 062A ; MA # ( ‎ٺ‎ → ‎ت‎ ) ARABIC LETTER TTEHEH → ARABIC LETTER TEH # +FB60 ; 062A ; MA # ( ‎ﭠ‎ → ‎ت‎ ) ARABIC LETTER TTEHEH INITIAL FORM → ARABIC LETTER TEH # →‎ٺ‎→ +FB61 ; 062A ; MA # ( ‎ﭡ‎ → ‎ت‎ ) ARABIC LETTER TTEHEH MEDIAL FORM → ARABIC LETTER TEH # →‎ٺ‎→ +FB5F ; 062A ; MA # ( ‎ﭟ‎ → ‎ت‎ ) ARABIC LETTER TTEHEH FINAL FORM → ARABIC LETTER TEH # →‎ٺ‎→ +FB5E ; 062A ; MA # ( ‎ﭞ‎ → ‎ت‎ ) ARABIC LETTER TTEHEH ISOLATED FORM → ARABIC LETTER TEH # →‎ٺ‎→ + +08BF ; 062A 0306 ; MA # ( ‎ࢿ‎ → ‎ت̆‎ ) ARABIC LETTER TEH WITH SMALL V → ARABIC LETTER TEH, COMBINING BREVE # →‎تٚ‎→ FCA5 ; 062A 006F ; MA # ( ‎ﲥ‎ → ‎تo‎ ) ARABIC LIGATURE TEH WITH HEH INITIAL FORM → ARABIC LETTER TEH, LATIN SMALL LETTER O # →‎ته‎→ FCE4 ; 062A 006F ; MA # ( ‎ﳤ‎ → ‎تo‎ ) ARABIC LIGATURE TEH WITH HEH MEDIAL FORM → ARABIC LETTER TEH, LATIN SMALL LETTER O # →‎ته‎→ @@ -4484,11 +4624,6 @@ FC0F ; 062A 0649 ; MA # ( ‎ﰏ‎ → ‎تى‎ ) ARABIC LIGATURE TEH WITH AL FC75 ; 062A 0649 ; MA # ( ‎ﱵ‎ → ‎تى‎ ) ARABIC LIGATURE TEH WITH YEH FINAL FORM → ARABIC LETTER TEH, ARABIC LETTER ALEF MAKSURA # →‎تي‎→ FC10 ; 062A 0649 ; MA # ( ‎ﰐ‎ → ‎تى‎ ) ARABIC LIGATURE TEH WITH YEH ISOLATED FORM → ARABIC LETTER TEH, ARABIC LETTER ALEF MAKSURA # →‎تي‎→ -FB60 ; 067A ; MA # ( ‎ﭠ‎ → ‎ٺ‎ ) ARABIC LETTER TTEHEH INITIAL FORM → ARABIC LETTER TTEHEH # -FB61 ; 067A ; MA # ( ‎ﭡ‎ → ‎ٺ‎ ) ARABIC LETTER TTEHEH MEDIAL FORM → ARABIC LETTER TTEHEH # -FB5F ; 067A ; MA # ( ‎ﭟ‎ → ‎ٺ‎ ) ARABIC LETTER TTEHEH FINAL FORM → ARABIC LETTER TTEHEH # -FB5E ; 067A ; MA # ( ‎ﭞ‎ → ‎ٺ‎ ) ARABIC LETTER TTEHEH ISOLATED FORM → ARABIC LETTER TTEHEH # - FB64 ; 067F ; MA # ( ‎ﭤ‎ → ‎ٿ‎ ) ARABIC LETTER TEHEH INITIAL FORM → ARABIC LETTER TEHEH # FB65 ; 067F ; MA # ( ‎ﭥ‎ → ‎ٿ‎ ) ARABIC LETTER TEHEH MEDIAL FORM → ARABIC LETTER TEHEH # FB63 ; 067F ; MA # ( ‎ﭣ‎ → ‎ٿ‎ ) ARABIC LETTER TEHEH FINAL FORM → ARABIC LETTER TEHEH # @@ -4542,6 +4677,8 @@ FB7D ; 0686 ; MA # ( ‎ﭽ‎ → ‎چ‎ ) ARABIC LETTER TCHEH MEDIAL FORM FB7B ; 0686 ; MA # ( ‎ﭻ‎ → ‎چ‎ ) ARABIC LETTER TCHEH FINAL FORM → ARABIC LETTER TCHEH # FB7A ; 0686 ; MA # ( ‎ﭺ‎ → ‎چ‎ ) ARABIC LETTER TCHEH ISOLATED FORM → ARABIC LETTER TCHEH # +08C1 ; 0686 0306 ; MA # ( ‎ࣁ‎ → ‎چ̆‎ ) ARABIC LETTER TCHEH WITH SMALL V → ARABIC LETTER TCHEH, COMBINING BREVE # →‎چٚ‎→ + FB80 ; 0687 ; MA # ( ‎ﮀ‎ → ‎ڇ‎ ) ARABIC LETTER TCHEHEH INITIAL FORM → ARABIC LETTER TCHEHEH # FB81 ; 0687 ; MA # ( ‎ﮁ‎ → ‎ڇ‎ ) ARABIC LETTER TCHEHEH MEDIAL FORM → ARABIC LETTER TCHEHEH # FB7F ; 0687 ; MA # ( ‎ﭿ‎ → ‎ڇ‎ ) ARABIC LETTER TCHEHEH FINAL FORM → ARABIC LETTER TCHEHEH # @@ -4617,6 +4754,7 @@ FB88 ; 062F 0615 ; MA # ( ‎ﮈ‎ → ‎دؕ‎ ) ARABIC LETTER DDAL ISOLATED 068E ; 062F 06DB ; MA # ( ‎ڎ‎ → ‎دۛ‎ ) ARABIC LETTER DUL → ARABIC LETTER DAL, ARABIC SMALL HIGH THREE DOTS # FB87 ; 062F 06DB ; MA # ( ‎ﮇ‎ → ‎دۛ‎ ) ARABIC LETTER DUL FINAL FORM → ARABIC LETTER DAL, ARABIC SMALL HIGH THREE DOTS # →‎ڎ‎→ FB86 ; 062F 06DB ; MA # ( ‎ﮆ‎ → ‎دۛ‎ ) ARABIC LETTER DUL ISOLATED FORM → ARABIC LETTER DAL, ARABIC SMALL HIGH THREE DOTS # →‎ڎ‎→ +068F ; 062F 06DB ; MA # ( ‎ڏ‎ → ‎دۛ‎ ) ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS → ARABIC LETTER DAL, ARABIC SMALL HIGH THREE DOTS # →‎ڎ‎→ 06EE ; 062F 0302 ; MA # ( ‎ۮ‎ → ‎د̂‎ ) ARABIC LETTER DAL WITH INVERTED V → ARABIC LETTER DAL, COMBINING CIRCUMFLEX ACCENT # →‎دٛ‎→ @@ -4665,6 +4803,7 @@ FC5C ; 0631 0670 ; MA # ( ‎ﱜ‎ → ‎رٰ‎ ) ARABIC LIGATURE REH WITH SU FDF6 ; 0631 0633 0648 0644 ; MA # ( ‎ﷶ‎ → ‎رسول‎ ) ARABIC LIGATURE RASOUL ISOLATED FORM → ARABIC LETTER REH, ARABIC LETTER SEEN, ARABIC LETTER WAW, ARABIC LETTER LAM # FDFC ; 0631 0649 006C 0644 ; MA #* ( ‎﷼‎ → ‎رىlل‎ ) RIAL SIGN → ARABIC LETTER REH, ARABIC LETTER ALEF MAKSURA, LATIN SMALL LETTER L, ARABIC LETTER LAM # →‎ریال‎→ +20C1 ; 0631 0649 006C 0644 ; MA #* ( ⃁ → ‎رىlل‎ ) SAUDI RIYAL SIGN → ARABIC LETTER REH, ARABIC LETTER ALEF MAKSURA, LATIN SMALL LETTER L, ARABIC LETTER LAM # →‎﷼‎→→‎ریال‎→ 1EE06 ; 0632 ; MA # ( ‎𞸆‎ → ‎ز‎ ) ARABIC MATHEMATICAL ZAIN → ARABIC LETTER ZAIN # 1EE86 ; 0632 ; MA # ( ‎𞺆‎ → ‎ز‎ ) ARABIC MATHEMATICAL LOOPED ZAIN → ARABIC LETTER ZAIN # @@ -5085,6 +5224,8 @@ FBD4 ; 0643 06DB ; MA # ( ‎ﯔ‎ → ‎كۛ‎ ) ARABIC LETTER NG FINAL FORM FBD3 ; 0643 06DB ; MA # ( ‎ﯓ‎ → ‎كۛ‎ ) ARABIC LETTER NG ISOLATED FORM → ARABIC LETTER KAF, ARABIC SMALL HIGH THREE DOTS # →‎ڭ‎→ 0763 ; 0643 06DB ; MA # ( ‎ݣ‎ → ‎كۛ‎ ) ARABIC LETTER KEHEH WITH THREE DOTS ABOVE → ARABIC LETTER KAF, ARABIC SMALL HIGH THREE DOTS # →‎ڭ‎→ +08C2 ; 0643 0306 ; MA # ( ‎ࣂ‎ → ‎ك̆‎ ) ARABIC LETTER KEHEH WITH SMALL V → ARABIC LETTER KAF, COMBINING BREVE # →‎کٚ‎→ + FC80 ; 0643 006C ; MA # ( ‎ﲀ‎ → ‎كl‎ ) ARABIC LIGATURE KAF WITH ALEF FINAL FORM → ARABIC LETTER KAF, LATIN SMALL LETTER L # →‎كا‎→ FC37 ; 0643 006C ; MA # ( ‎ﰷ‎ → ‎كl‎ ) ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM → ARABIC LETTER KAF, LATIN SMALL LETTER L # →‎كا‎→ @@ -5218,8 +5359,6 @@ FEE1 ; 0645 ; MA # ( ‎ﻡ‎ → ‎م‎ ) ARABIC LETTER MEEM ISOLATED FORM 08A7 ; 0645 06DB ; MA # ( ‎ࢧ‎ → ‎مۛ‎ ) ARABIC LETTER MEEM WITH THREE DOTS ABOVE → ARABIC LETTER MEEM, ARABIC SMALL HIGH THREE DOTS # -06FE ; 0645 0348 ; MA #* ( ‎۾‎ → ‎م͈‎ ) ARABIC SIGN SINDHI POSTPOSITION MEN → ARABIC LETTER MEEM, COMBINING DOUBLE VERTICAL LINE BELOW # - FC88 ; 0645 006C ; MA # ( ‎ﲈ‎ → ‎مl‎ ) ARABIC LIGATURE MEEM WITH ALEF FINAL FORM → ARABIC LETTER MEEM, LATIN SMALL LETTER L # →‎ما‎→ FCCE ; 0645 062C ; MA # ( ‎ﳎ‎ → ‎مج‎ ) ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM → ARABIC LETTER MEEM, ARABIC LETTER JEEM # @@ -5262,6 +5401,8 @@ FDB1 ; 0645 0645 0649 ; MA # ( ‎ﶱ‎ → ‎ممى‎ ) ARABIC LIGATURE MEEM FC49 ; 0645 0649 ; MA # ( ‎ﱉ‎ → ‎مى‎ ) ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM → ARABIC LETTER MEEM, ARABIC LETTER ALEF MAKSURA # FC4A ; 0645 0649 ; MA # ( ‎ﱊ‎ → ‎مى‎ ) ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM → ARABIC LETTER MEEM, ARABIC LETTER ALEF MAKSURA # →‎مي‎→ +06FE ; 0645 10EFA ; MA #* ( ‎۾‎ → ‎م𐻺‎ ) ARABIC SIGN SINDHI POSTPOSITION MEN → ARABIC LETTER MEEM, ARABIC DOUBLE VERTICAL BAR BELOW # + 1EE0D ; 0646 ; MA # ( ‎𞸍‎ → ‎ن‎ ) ARABIC MATHEMATICAL NOON → ARABIC LETTER NOON # 1EE2D ; 0646 ; MA # ( ‎𞸭‎ → ‎ن‎ ) ARABIC MATHEMATICAL INITIAL NOON → ARABIC LETTER NOON # 1EE4D ; 0646 ; MA # ( ‎𞹍‎ → ‎ن‎ ) ARABIC MATHEMATICAL TAILED NOON → ARABIC LETTER NOON # @@ -5272,6 +5413,7 @@ FEE7 ; 0646 ; MA # ( ‎ﻧ‎ → ‎ن‎ ) ARABIC LETTER NOON INITIAL FORM FEE8 ; 0646 ; MA # ( ‎ﻨ‎ → ‎ن‎ ) ARABIC LETTER NOON MEDIAL FORM → ARABIC LETTER NOON # FEE6 ; 0646 ; MA # ( ‎ﻦ‎ → ‎ن‎ ) ARABIC LETTER NOON FINAL FORM → ARABIC LETTER NOON # FEE5 ; 0646 ; MA # ( ‎ﻥ‎ → ‎ن‎ ) ARABIC LETTER NOON ISOLATED FORM → ARABIC LETTER NOON # +10EC6 ; 0646 ; MA # ( ‎𐻆‎ → ‎ن‎ ) ARABIC LETTER THIN NOON → ARABIC LETTER NOON # 0768 ; 0646 0615 ; MA # ( ‎ݨ‎ → ‎نؕ‎ ) ARABIC LETTER NOON WITH SMALL TAH → ARABIC LETTER NOON, ARABIC SMALL HIGH TAH # @@ -5413,6 +5555,7 @@ FB58 ; 0649 06DB ; MA # ( ‎ﭘ‎ → ‎ىۛ‎ ) ARABIC LETTER PEH INITIAL F FB59 ; 0649 06DB ; MA # ( ‎ﭙ‎ → ‎ىۛ‎ ) ARABIC LETTER PEH MEDIAL FORM → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS # →‎پ‎→→‎ڽ‎→→‎ںۛ‎→ FB57 ; 0649 06DB ; MA # ( ‎ﭗ‎ → ‎ىۛ‎ ) ARABIC LETTER PEH FINAL FORM → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS # →‎پ‎→→‎ڽ‎→→‎ںۛ‎→ FB56 ; 0649 06DB ; MA # ( ‎ﭖ‎ → ‎ىۛ‎ ) ARABIC LETTER PEH ISOLATED FORM → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS # →‎پ‎→→‎ڽ‎→→‎ںۛ‎→ +0752 ; 0649 06DB ; MA # ( ‎ݒ‎ → ‎ىۛ‎ ) ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS # →‎پ‎→→‎ڽ‎→→‎ںۛ‎→ 062B ; 0649 06DB ; MA # ( ‎ث‎ → ‎ىۛ‎ ) ARABIC LETTER THEH → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS # →‎ٮۛ‎→ 1EE16 ; 0649 06DB ; MA # ( ‎𞸖‎ → ‎ىۛ‎ ) ARABIC MATHEMATICAL THEH → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS # →‎ث‎→→‎ٮۛ‎→ 1EE36 ; 0649 06DB ; MA # ( ‎𞸶‎ → ‎ىۛ‎ ) ARABIC MATHEMATICAL INITIAL THEH → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS # →‎ث‎→→‎ٮۛ‎→ @@ -5432,10 +5575,16 @@ FE99 ; 0649 06DB ; MA # ( ‎ﺙ‎ → ‎ىۛ‎ ) ARABIC LETTER THEH ISOLATED 0756 ; 0649 0306 ; MA # ( ‎ݖ‎ → ‎ى̆‎ ) ARABIC LETTER BEH WITH SMALL V → ARABIC LETTER ALEF MAKSURA, COMBINING BREVE # →‎ٮٚ‎→ 06CE ; 0649 0306 ; MA # ( ‎ێ‎ → ‎ى̆‎ ) ARABIC LETTER YEH WITH SMALL V → ARABIC LETTER ALEF MAKSURA, COMBINING BREVE # →‎یٚ‎→ +08C0 ; 0649 0615 0306 ; MA # ( ‎ࣀ‎ → ‎ىؕ̆‎ ) ARABIC LETTER TTEH WITH SMALL V → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH TAH, COMBINING BREVE # →‎ٹٚ‎→ + +08BE ; 0649 06DB 0306 ; MA # ( ‎ࢾ‎ → ‎ىۛ̆‎ ) ARABIC LETTER PEH WITH SMALL V → ARABIC LETTER ALEF MAKSURA, ARABIC SMALL HIGH THREE DOTS, COMBINING BREVE # →‎پٚ‎→ + 08BA ; 0649 0306 0307 ; MA # ( ‎ࢺ‎ → ‎ى̆̇‎ ) ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE → ARABIC LETTER ALEF MAKSURA, COMBINING BREVE, COMBINING DOT ABOVE # →‎يۨ‎→ 063D ; 0649 0302 ; MA # ( ‎ؽ‎ → ‎ى̂‎ ) ARABIC LETTER FARSI YEH WITH INVERTED V → ARABIC LETTER ALEF MAKSURA, COMBINING CIRCUMFLEX ACCENT # →‎یٛ‎→ +088F ; 0649 030A ; MA # ( ‎࢏‎ → ‎ى̊‎ ) ARABIC LETTER NOON WITH RING ABOVE → ARABIC LETTER ALEF MAKSURA, COMBINING RING ABOVE # →‎ں̊‎→ + 08A8 ; 0649 0654 ; MA # ( ‎ࢨ‎ → ‎ىٔ‎ ) ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE → ARABIC LETTER ALEF MAKSURA, ARABIC HAMZA ABOVE # →‎ئ‎→ FC90 ; 0649 0670 ; MA # ( ‎ﲐ‎ → ‎ىٰ‎ ) ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM → ARABIC LETTER ALEF MAKSURA, ARABIC LETTER SUPERSCRIPT ALEF # @@ -5564,6 +5713,7 @@ FBB0 ; 06D3 ; MA # ( ‎ﮰ‎ → ‎ۓ‎ ) ARABIC LETTER YEH BARREE WITH HAMZ 205E ; 2D42 ; MA #* ( ⁞ → ⵂ ) VERTICAL FOUR DOTS → TIFINAGH LETTER TUAREG YAH # 2E3D ; 2D42 ; MA #* ( ⸽ → ⵂ ) VERTICAL SIX DOTS → TIFINAGH LETTER TUAREG YAH # →⁞→ 2999 ; 2D42 ; MA #* ( ⦙ → ⵂ ) DOTTED FENCE → TIFINAGH LETTER TUAREG YAH # →⁞→ +1CEEF ; 2D42 ; MA #* ( 𜻯 → ⵂ ) GEOMANTIC FIGURE VIA → TIFINAGH LETTER TUAREG YAH # →⁞→ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS → TIFINAGH LETTER TUAREG YAGH # →⁝→ 205D ; 2D57 ; MA #* ( ⁝ → ⵗ ) TRICOLON → TIFINAGH LETTER TUAREG YAGH # @@ -5577,31 +5727,72 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 054A ; 1323 ; MA # ( Պ → ጣ ) ARMENIAN CAPITAL LETTER PEH → ETHIOPIC SYLLABLE THAA # +0972 ; 0905 0306 ; MA # ( ॲ → अ̆ ) DEVANAGARI LETTER CANDRA A → DEVANAGARI LETTER A, COMBINING BREVE # →अॅ→ + 0906 ; 0905 093E ; MA # ( आ → अा ) DEVANAGARI LETTER AA → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA # -0912 ; 0905 093E 0946 ; MA # ( ऒ → अाॆ ) DEVANAGARI LETTER SHORT O → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA, DEVANAGARI VOWEL SIGN SHORT E # →अॊ→→आॆ→ +0911 ; 0905 093E 0306 ; MA # ( ऑ → अा̆ ) DEVANAGARI LETTER CANDRA O → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA, COMBINING BREVE # →अॉ→ -0913 ; 0905 093E 0947 ; MA # ( ओ → अाे ) DEVANAGARI LETTER O → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA, DEVANAGARI VOWEL SIGN E # →अो→→आे→ +0974 ; 0905 093E 093A ; MA # ( ॴ → अाऺ ) DEVANAGARI LETTER OOE → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA, DEVANAGARI VOWEL SIGN OE # →अऻ→ + +0912 ; 0905 093E 0946 ; MA # ( ऒ → अाॆ ) DEVANAGARI LETTER SHORT O → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA, DEVANAGARI VOWEL SIGN SHORT E # →अॊ→→आॆ→ 0914 ; 0905 093E 0948 ; MA # ( औ → अाै ) DEVANAGARI LETTER AU → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA, DEVANAGARI VOWEL SIGN AI # →अौ→→आै→ +0913 ; 0905 093E 11B64 ; MA # ( ओ → अा𑭤 ) DEVANAGARI LETTER O → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AA, SHARADA VOWEL SIGN SHORT E # →अो→→आे→ + +0973 ; 0905 093A ; MA # ( ॳ → अऺ ) DEVANAGARI LETTER OE → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN OE # + +0975 ; 0905 094F ; MA # ( ॵ → अॏ ) DEVANAGARI LETTER AW → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN AW # + 0904 ; 0905 0946 ; MA # ( ऄ → अॆ ) DEVANAGARI LETTER SHORT A → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN SHORT E # -0911 ; 0905 0949 ; MA # ( ऑ → अॉ ) DEVANAGARI LETTER CANDRA O → DEVANAGARI LETTER A, DEVANAGARI VOWEL SIGN CANDRA O # +0A24 ; 0909 ; MA # ( ਤ → उ ) GURMUKHI LETTER TA → DEVANAGARI LETTER U # -090D ; 090F 0945 ; MA # ( ऍ → एॅ ) DEVANAGARI LETTER CANDRA E → DEVANAGARI LETTER E, DEVANAGARI VOWEL SIGN CANDRA E # +090D ; 090F 0306 ; MA # ( ऍ → ए̆ ) DEVANAGARI LETTER CANDRA E → DEVANAGARI LETTER E, COMBINING BREVE # →एॅ→ 090E ; 090F 0946 ; MA # ( ऎ → एॆ ) DEVANAGARI LETTER SHORT E → DEVANAGARI LETTER E, DEVANAGARI VOWEL SIGN SHORT E # -0910 ; 090F 0947 ; MA # ( ऐ → एे ) DEVANAGARI LETTER AI → DEVANAGARI LETTER E, DEVANAGARI VOWEL SIGN E # +0910 ; 090F 11B64 ; MA # ( ऐ → ए𑭤 ) DEVANAGARI LETTER AI → DEVANAGARI LETTER E, SHARADA VOWEL SIGN SHORT E # →एे→ + +0A1F ; 091F ; MA # ( ਟ → ट ) GURMUKHI LETTER TTA → DEVANAGARI LETTER TTA # + +0A20 ; 0920 ; MA # ( ਠ → ठ ) GURMUKHI LETTER TTHA → DEVANAGARI LETTER TTHA # + +0A2B ; 0922 ; MA # ( ਫ → ढ ) GURMUKHI LETTER PHA → DEVANAGARI LETTER DDHA # + +0A1C ; 0924 094D 0924 ; MA # ( ਜ → त्त ) GURMUKHI LETTER JA → DEVANAGARI LETTER TA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER TA # + +0A27 ; 092A ; MA # ( ਧ → प ) GURMUKHI LETTER DHA → DEVANAGARI LETTER PA # + +0A72 ; 092A 094D 091F ; MA # ( ੲ → प्ट ) GURMUKHI IRI → DEVANAGARI LETTER PA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER TTA # + +0A07 ; 092A 094D 091F 09BF ; MA # ( ਇ → प्टি ) GURMUKHI LETTER I → DEVANAGARI LETTER PA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER TTA, BENGALI VOWEL SIGN I # →ੲਿ→ + +0A08 ; 092A 094D 091F 0A40 ; MA # ( ਈ → प्टੀ ) GURMUKHI LETTER II → DEVANAGARI LETTER PA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER TTA, GURMUKHI VOWEL SIGN II # →ੲੀ→ + +0A0F ; 092A 094D 091F 11B64 ; MA # ( ਏ → प्ट𑭤 ) GURMUKHI LETTER EE → DEVANAGARI LETTER PA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER TTA, SHARADA VOWEL SIGN SHORT E # →ੲੇ→ + +0A2E ; 092D ; MA # ( ਮ → भ ) GURMUKHI LETTER MA → DEVANAGARI LETTER BHA # + +0A38 ; 092E ; MA # ( ਸ → म ) GURMUKHI LETTER SA → DEVANAGARI LETTER MA # 0908 ; 0930 094D 0907 ; MA # ( ई → र्इ ) DEVANAGARI LETTER II → DEVANAGARI LETTER RA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER I # +0A15 ; 0935 ; MA # ( ਕ → व ) GURMUKHI LETTER KA → DEVANAGARI LETTER VA # + +0A35 ; 0939 ; MA # ( ਵ → ह ) GURMUKHI LETTER VA → DEVANAGARI LETTER HA # + 0ABD ; 093D ; MA # ( ઽ → ऽ ) GUJARATI SIGN AVAGRAHA → DEVANAGARI SIGN AVAGRAHA # 111DC ; A8FB ; MA # ( 𑇜 → ꣻ ) SHARADA HEADSTROKE → DEVANAGARI HEADSTROKE # +0949 ; 093E 0306 ; MA # ( ॉ → ा̆ ) DEVANAGARI VOWEL SIGN CANDRA O → DEVANAGARI VOWEL SIGN AA, COMBINING BREVE # →ाॅ→ + +093B ; 093E 093A ; MA # ( ऻ → ाऺ ) DEVANAGARI VOWEL SIGN OOE → DEVANAGARI VOWEL SIGN AA, DEVANAGARI VOWEL SIGN OE # + 111CB ; 093A ; MA # ( 𑇋 → ऺ ) SHARADA VOWEL MODIFIER MARK → DEVANAGARI VOWEL SIGN OE # +11B60 ; 093A ; MA # ( 𑭠 → ऺ ) SHARADA VOWEL SIGN OE → DEVANAGARI VOWEL SIGN OE # 0AC1 ; 0941 ; MA # ( ુ → ु ) GUJARATI VOWEL SIGN U → DEVANAGARI VOWEL SIGN U # @@ -5609,6 +5800,8 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0A4B ; 0946 ; MA # ( ੋ → ॆ ) GURMUKHI VOWEL SIGN OO → DEVANAGARI VOWEL SIGN SHORT E # +0A48 ; 0948 ; MA # ( ੈ → ै ) GURMUKHI VOWEL SIGN AI → DEVANAGARI VOWEL SIGN AI # + 0A4D ; 094D ; MA # ( ੍ → ् ) GURMUKHI SIGN VIRAMA → DEVANAGARI SIGN VIRAMA # 0ACD ; 094D ; MA # ( ્ → ् ) GUJARATI SIGN VIRAMA → DEVANAGARI SIGN VIRAMA # @@ -5649,6 +5842,7 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 114A8 ; 09AF ; MA # ( 𑒨 → য ) TIRHUTA LETTER YA → BENGALI LETTER YA # +09F0 ; 09B0 ; MA # ( ৰ → র ) BENGALI LETTER RA WITH MIDDLE DIAGONAL → BENGALI LETTER RA # 114AB ; 09B0 ; MA # ( 𑒫 → র ) TIRHUTA LETTER VA → BENGALI LETTER RA # 1149D ; 09B2 ; MA # ( 𑒝 → ল ) TIRHUTA LETTER NNA → BENGALI LETTER LA # @@ -5661,6 +5855,8 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 114B0 ; 09BE ; MA # ( 𑒰 → া ) TIRHUTA VOWEL SIGN AA → BENGALI VOWEL SIGN AA # +093F ; 09BF ; MA # ( ि → ি ) DEVANAGARI VOWEL SIGN I → BENGALI VOWEL SIGN I # +0A3F ; 09BF ; MA # ( ਿ → ি ) GURMUKHI VOWEL SIGN I → BENGALI VOWEL SIGN I # →ि→ 114B1 ; 09BF ; MA # ( 𑒱 → ি ) TIRHUTA VOWEL SIGN I → BENGALI VOWEL SIGN I # 114B9 ; 09C7 ; MA # ( 𑒹 → ে ) TIRHUTA VOWEL SIGN E → BENGALI VOWEL SIGN E # @@ -5673,22 +5869,16 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 114BD ; 09D7 ; MA # ( 𑒽 → ৗ ) TIRHUTA VOWEL SIGN SHORT O → BENGALI AU LENGTH MARK # -0A09 ; 0A73 0A41 ; MA # ( ਉ → ੳੁ ) GURMUKHI LETTER U → GURMUKHI URA, GURMUKHI VOWEL SIGN U # +0A09 ; 0A73 11B62 ; MA # ( ਉ → ੳ𑭢 ) GURMUKHI LETTER U → GURMUKHI URA, SHARADA VOWEL SIGN UE # →ੳੁ→ -0A0A ; 0A73 0A42 ; MA # ( ਊ → ੳੂ ) GURMUKHI LETTER UU → GURMUKHI URA, GURMUKHI VOWEL SIGN UU # +0A0A ; 0A73 11B63 ; MA # ( ਊ → ੳ𑭣 ) GURMUKHI LETTER UU → GURMUKHI URA, SHARADA VOWEL SIGN UUE # →ੳੂ→ -0A06 ; 0A05 0A3E ; MA # ( ਆ → ਅਾ ) GURMUKHI LETTER AA → GURMUKHI LETTER A, GURMUKHI VOWEL SIGN AA # +0A10 ; 0A05 0948 ; MA # ( ਐ → ਅै ) GURMUKHI LETTER AI → GURMUKHI LETTER A, DEVANAGARI VOWEL SIGN AI # →ਅੈ→ -0A10 ; 0A05 0A48 ; MA # ( ਐ → ਅੈ ) GURMUKHI LETTER AI → GURMUKHI LETTER A, GURMUKHI VOWEL SIGN AI # +0A06 ; 0A05 0A3E ; MA # ( ਆ → ਅਾ ) GURMUKHI LETTER AA → GURMUKHI LETTER A, GURMUKHI VOWEL SIGN AA # 0A14 ; 0A05 0A4C ; MA # ( ਔ → ਅੌ ) GURMUKHI LETTER AU → GURMUKHI LETTER A, GURMUKHI VOWEL SIGN AU # -0A07 ; 0A72 0A3F ; MA # ( ਇ → ੲਿ ) GURMUKHI LETTER I → GURMUKHI IRI, GURMUKHI VOWEL SIGN I # - -0A08 ; 0A72 0A40 ; MA # ( ਈ → ੲੀ ) GURMUKHI LETTER II → GURMUKHI IRI, GURMUKHI VOWEL SIGN II # - -0A0F ; 0A72 0A47 ; MA # ( ਏ → ੲੇ ) GURMUKHI LETTER EE → GURMUKHI IRI, GURMUKHI VOWEL SIGN EE # - 0A86 ; 0A85 0ABE ; MA # ( આ → અા ) GUJARATI LETTER AA → GUJARATI LETTER A, GUJARATI VOWEL SIGN AA # 0A91 ; 0A85 0ABE 0AC5 ; MA # ( ઑ → અાૅ ) GUJARATI VOWEL CANDRA O → GUJARATI LETTER A, GUJARATI VOWEL SIGN AA, GUJARATI VOWEL SIGN CANDRA E # →અૉ→→આૅ→ @@ -5705,6 +5895,8 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0B06 ; 0B05 0B3E ; MA # ( ଆ → ଅା ) ORIYA LETTER AA → ORIYA LETTER A, ORIYA VOWEL SIGN AA # +1031 ; 0B47 ; MA # ( ေ → େ ) MYANMAR VOWEL SIGN E → ORIYA VOWEL SIGN E # + 0BEE ; 0B85 ; MA # ( ௮ → அ ) TAMIL DIGIT EIGHT → TAMIL LETTER A # 0BB0 ; 0B88 ; MA # ( ர → ஈ ) TAMIL LETTER RA → TAMIL LETTER II # →ா→ @@ -5726,6 +5918,8 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0B9C ; 0B90 ; MA # ( ஜ → ஐ ) TAMIL LETTER JA → TAMIL LETTER AI # 0D1C ; 0B90 ; MA # ( ജ → ஐ ) MALAYALAM LETTER JA → TAMIL LETTER AI # →ஜ→ +0B94 ; 0B92 0BB3 ; MA # ( ஔ → ஒள ) TAMIL LETTER AU → TAMIL LETTER O, TAMIL LETTER LLA # + 0BE7 ; 0B95 ; MA # ( ௧ → க ) TAMIL DIGIT ONE → TAMIL LETTER KA # 0BEA ; 0B9A ; MA # ( ௪ → ச ) TAMIL DIGIT FOUR → TAMIL LETTER CA # @@ -5738,18 +5932,25 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0D23 ; 0BA3 ; MA # ( ണ → ண ) MALAYALAM LETTER NNA → TAMIL LETTER NNA # +0D7A ; 0BA3 0D4D ; MA # ( ൺ → ண് ) MALAYALAM LETTER CHILLU NN → TAMIL LETTER NNA, MALAYALAM SIGN VIRAMA # →ണ്→ + 0BFA ; 0BA8 0BC0 ; MA #* ( ௺ → நீ ) TAMIL NUMBER SIGN → TAMIL LETTER NA, TAMIL VOWEL SIGN II # +0D25 ; 0BAE ; MA # ( ഥ → ம ) MALAYALAM LETTER THA → TAMIL LETTER MA # + 0BF4 ; 0BAE 0BC0 ; MA #* ( ௴ → மீ ) TAMIL MONTH SIGN → TAMIL LETTER MA, TAMIL VOWEL SIGN II # 0BF0 ; 0BAF ; MA #* ( ௰ → ய ) TAMIL NUMBER TEN → TAMIL LETTER YA # +0D16 ; 0BB5 ; MA # ( ഖ → வ ) MALAYALAM LETTER KHA → TAMIL LETTER VA # + 0D34 ; 0BB4 ; MA # ( ഴ → ழ ) MALAYALAM LETTER LLLA → TAMIL LETTER LLLA # 0BD7 ; 0BB3 ; MA # ( ௗ → ள ) TAMIL AU LENGTH MARK → TAMIL LETTER LLA # 0BC8 ; 0BA9 ; MA # ( ை → ன ) TAMIL VOWEL SIGN AI → TAMIL LETTER NNNA # +0BB8 ; 0BB6 ; MA # ( ஸ → ஶ ) TAMIL LETTER SA → TAMIL LETTER SHA # 0D36 ; 0BB6 ; MA # ( ശ → ஶ ) MALAYALAM LETTER SHA → TAMIL LETTER SHA # 0BF8 ; 0BB7 ; MA #* ( ௸ → ஷ ) TAMIL AS ABOVE SIGN → TAMIL LETTER SSA # @@ -5757,10 +5958,18 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0D3F ; 0BBF ; MA # ( ി → ி ) MALAYALAM VOWEL SIGN I → TAMIL VOWEL SIGN I # 0D40 ; 0BBF ; MA # ( ീ → ி ) MALAYALAM VOWEL SIGN II → TAMIL VOWEL SIGN I # +0D46 ; 0BC6 ; MA # ( െ → ெ ) MALAYALAM VOWEL SIGN E → TAMIL VOWEL SIGN E # + 0BCA ; 0BC6 0B88 ; MA # ( ொ → ெஈ ) TAMIL VOWEL SIGN O → TAMIL VOWEL SIGN E, TAMIL LETTER II # →ெர→ 0BCC ; 0BC6 0BB3 ; MA # ( ௌ → ெள ) TAMIL VOWEL SIGN AU → TAMIL VOWEL SIGN E, TAMIL LETTER LLA # +0D48 ; 0BC6 0BC6 ; MA # ( ൈ → ெெ ) MALAYALAM VOWEL SIGN AI → TAMIL VOWEL SIGN E, TAMIL VOWEL SIGN E # →െെ→ + +0D10 ; 0BC6 0D0E ; MA # ( ഐ → ெഎ ) MALAYALAM LETTER AI → TAMIL VOWEL SIGN E, MALAYALAM LETTER E # →െഎ→ + +0D47 ; 0BC7 ; MA # ( േ → ே ) MALAYALAM VOWEL SIGN EE → TAMIL VOWEL SIGN EE # + 0BCB ; 0BC7 0B88 ; MA # ( ோ → ேஈ ) TAMIL VOWEL SIGN OO → TAMIL VOWEL SIGN EE, TAMIL LETTER II # →ேர→ 0C85 ; 0C05 ; MA # ( ಅ → అ ) KANNADA LETTER A → TELUGU LETTER A # @@ -5773,6 +5982,8 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0C61 ; 0C0C 0C3E ; MA # ( ౡ → ఌా ) TELUGU LETTER VOCALIC LL → TELUGU LETTER VOCALIC L, TELUGU VOWEL SIGN AA # +0C90 ; 0C10 ; MA # ( ಐ → ఐ ) KANNADA LETTER AI → TELUGU LETTER AI # + 0C92 ; 0C12 ; MA # ( ಒ → ఒ ) KANNADA LETTER O → TELUGU LETTER O # 0C14 ; 0C12 0C4C ; MA # ( ఔ → ఒౌ ) TELUGU LETTER AU → TELUGU LETTER O, TELUGU VOWEL SIGN AU # @@ -5781,20 +5992,32 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0C13 ; 0C12 0C55 ; MA # ( ఓ → ఒౕ ) TELUGU LETTER OO → TELUGU LETTER O, TELUGU LENGTH MARK # 0C93 ; 0C12 0C55 ; MA # ( ಓ → ఒౕ ) KANNADA LETTER OO → TELUGU LETTER O, TELUGU LENGTH MARK # →ఓ→ +0C97 ; 0C17 ; MA # ( ಗ → గ ) KANNADA LETTER GA → TELUGU LETTER GA # + 0C9C ; 0C1C ; MA # ( ಜ → జ ) KANNADA LETTER JA → TELUGU LETTER JA # +0C9D ; 0C1D ; MA # ( ಝ → ఝ ) KANNADA LETTER JHA → TELUGU LETTER JHA # + 0C9E ; 0C1E ; MA # ( ಞ → ఞ ) KANNADA LETTER NYA → TELUGU LETTER NYA # +0C9F ; 0C1F ; MA # ( ಟ → ట ) KANNADA LETTER TTA → TELUGU LETTER TTA # + 0C22 ; 0C21 0323 ; MA # ( ఢ → డ̣ ) TELUGU LETTER DDHA → TELUGU LETTER DDA, COMBINING DOT BELOW # 0CA3 ; 0C23 ; MA # ( ಣ → ణ ) KANNADA LETTER NNA → TELUGU LETTER NNA # +0CA6 ; 0C26 ; MA # ( ದ → ద ) KANNADA LETTER DA → TELUGU LETTER DA # + 0C25 ; 0C27 05BC ; MA # ( థ → ధּ ) TELUGU LETTER THA → TELUGU LETTER DHA, HEBREW POINT DAGESH OR MAPIQ # +0CA8 ; 0C28 ; MA # ( ನ → న ) KANNADA LETTER NA → TELUGU LETTER NA # + 0C2D ; 0C2C 0323 ; MA # ( భ → బ̣ ) TELUGU LETTER BHA → TELUGU LETTER BA, COMBINING DOT BELOW # 0CAF ; 0C2F ; MA # ( ಯ → య ) KANNADA LETTER YA → TELUGU LETTER YA # +0CB0 ; 0C30 ; MA # ( ರ → ర ) KANNADA LETTER RA → TELUGU LETTER RA # + 0C20 ; 0C30 05BC ; MA # ( ఠ → రּ ) TELUGU LETTER TTHA → TELUGU LETTER RA, HEBREW POINT DAGESH OR MAPIQ # 0CB1 ; 0C31 ; MA # ( ಱ → ఱ ) KANNADA LETTER RRA → TELUGU LETTER RRA # @@ -5807,15 +6030,23 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0C2E ; 0C35 0C41 ; MA # ( మ → వు ) TELUGU LETTER MA → TELUGU LETTER VA, TELUGU VOWEL SIGN U # +0CB3 ; 0C33 ; MA # ( ಳ → ళ ) KANNADA LETTER LLA → TELUGU LETTER LLA # + +0CBF ; 0C3F ; MA # ( ಿ → ి ) KANNADA VOWEL SIGN I → TELUGU VOWEL SIGN I # + +0CC1 ; 0C41 ; MA # ( ು → ు ) KANNADA VOWEL SIGN U → TELUGU VOWEL SIGN U # + 0C42 ; 0C41 0C3E ; MA # ( ూ → ుా ) TELUGU VOWEL SIGN UU → TELUGU VOWEL SIGN U, TELUGU VOWEL SIGN AA # +0CC3 ; 0C43 ; MA # ( ೃ → ృ ) KANNADA VOWEL SIGN VOCALIC R → TELUGU VOWEL SIGN VOCALIC R # + 0C44 ; 0C43 0C3E ; MA # ( ౄ → ృా ) TELUGU VOWEL SIGN VOCALIC RR → TELUGU VOWEL SIGN VOCALIC R, TELUGU VOWEL SIGN AA # 0CE1 ; 0C8C 0CBE ; MA # ( ೡ → ಌಾ ) KANNADA LETTER VOCALIC LL → KANNADA LETTER VOCALIC L, KANNADA VOWEL SIGN AA # -0D08 ; 0D07 0D57 ; MA # ( ഈ → ഇൗ ) MALAYALAM LETTER II → MALAYALAM LETTER I, MALAYALAM AU LENGTH MARK # +0C16 ; 0C96 0323 ; MA # ( ఖ → ಖ̣ ) TELUGU LETTER KHA → KANNADA LETTER KHA, COMBINING DOT BELOW # -0D10 ; 0D0E 0D46 ; MA # ( ഐ → എെ ) MALAYALAM LETTER AI → MALAYALAM LETTER E, MALAYALAM VOWEL SIGN E # +0D08 ; 0D07 0D57 ; MA # ( ഈ → ഇൗ ) MALAYALAM LETTER II → MALAYALAM LETTER I, MALAYALAM AU LENGTH MARK # 0D13 ; 0D12 0D3E ; MA # ( ഓ → ഒാ ) MALAYALAM LETTER OO → MALAYALAM LETTER O, MALAYALAM VOWEL SIGN AA # @@ -5836,24 +6067,50 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0D5A ; 0D28 0D4D 0D2E ; MA #* ( ൚ → ന്മ ) MALAYALAM FRACTION THREE EIGHTIETHS → MALAYALAM LETTER NA, MALAYALAM SIGN VIRAMA, MALAYALAM LETTER MA # +10D8 ; 0D30 ; MA # ( ი → ര ) GEORGIAN LETTER IN → MALAYALAM LETTER RA # →റ→ 0D31 ; 0D30 ; MA # ( റ → ര ) MALAYALAM LETTER RRA → MALAYALAM LETTER RA # +1002 ; 0D30 ; MA # ( ဂ → ര ) MYANMAR LETTER GA → MALAYALAM LETTER RA # →റ→ 0D6A ; 0D30 0D4D ; MA # ( ൪ → ര് ) MALAYALAM DIGIT FOUR → MALAYALAM LETTER RA, MALAYALAM SIGN VIRAMA # 0D7C ; 0D30 0D4D ; MA # ( ർ → ര് ) MALAYALAM LETTER CHILLU RR → MALAYALAM LETTER RA, MALAYALAM SIGN VIRAMA # →൪→ +1081 ; 0D30 103E ; MA # ( ႁ → രှ ) MYANMAR LETTER SHAN HA → MALAYALAM LETTER RA, MYANMAR CONSONANT SIGN MEDIAL HA # →ဂှ→ + +1000 ; 0D30 102C ; MA # ( က → രာ ) MYANMAR LETTER KA → MALAYALAM LETTER RA, MYANMAR VOWEL SIGN AA # →ဂာ→ + +1023 ; 0D30 102C 1039 0D30 102C ; MA # ( ဣ → രာ္രာ ) MYANMAR LETTER I → MALAYALAM LETTER RA, MYANMAR VOWEL SIGN AA, MYANMAR SIGN VIRAMA, MALAYALAM LETTER RA, MYANMAR VOWEL SIGN AA # →က္က→ + +0D7D ; 0D32 0D4D ; MA # ( ൽ → ല് ) MALAYALAM LETTER CHILLU L → MALAYALAM LETTER LA, MALAYALAM SIGN VIRAMA # + 0D6E ; 0D35 0D4D 0D30 ; MA # ( ൮ → വ്ര ) MALAYALAM DIGIT EIGHT → MALAYALAM LETTER VA, MALAYALAM SIGN VIRAMA, MALAYALAM LETTER RA # 0D76 ; 0D39 0D4D 0D2E ; MA #* ( ൶ → ഹ്മ ) MALAYALAM FRACTION ONE SIXTEENTH → MALAYALAM LETTER HA, MALAYALAM SIGN VIRAMA, MALAYALAM LETTER MA # +0D7E ; 0D33 0D4D ; MA # ( ൾ → ള് ) MALAYALAM LETTER CHILLU LL → MALAYALAM LETTER LLA, MALAYALAM SIGN VIRAMA # + 0D42 ; 0D41 ; MA # ( ൂ → ു ) MALAYALAM VOWEL SIGN UU → MALAYALAM VOWEL SIGN U # 0D43 ; 0D41 ; MA # ( ൃ → ു ) MALAYALAM VOWEL SIGN VOCALIC R → MALAYALAM VOWEL SIGN U # →ൂ→ -0D48 ; 0D46 0D46 ; MA # ( ൈ → െെ ) MALAYALAM VOWEL SIGN AI → MALAYALAM VOWEL SIGN E, MALAYALAM VOWEL SIGN E # +0DB5 ; 0D91 ; MA # ( ඵ → එ ) SINHALA LETTER MAHAAPRAANA PAYANNA → SINHALA LETTER EYANNA # + +0D93 ; 0D91 0DD9 ; MA # ( ඓ → එෙ ) SINHALA LETTER AIYANNA → SINHALA LETTER EYANNA, SINHALA VOWEL SIGN KOMBUVA # + +0D92 ; 0D91 0DCA ; MA # ( ඒ → එ් ) SINHALA LETTER EEYANNA → SINHALA LETTER EYANNA, SINHALA SIGN AL-LAKUNA # + +0DB9 ; 0D94 ; MA # ( ඹ → ඔ ) SINHALA LETTER AMBA BAYANNA → SINHALA LETTER OYANNA # + +0DB6 ; 0D9B ; MA # ( බ → ඛ ) SINHALA LETTER ALPAPRAANA BAYANNA → SINHALA LETTER MAHAAPRAANA KAYANNA # + +0DC0 ; 0DA0 ; MA # ( ව → ච ) SINHALA LETTER VAYANNA → SINHALA LETTER ALPAPRAANA CAYANNA # 0DEA ; 0DA2 ; MA # ( ෪ → ජ ) SINHALA LITH DIGIT FOUR → SINHALA LETTER ALPAPRAANA JAYANNA # 0DEB ; 0DAF ; MA # ( ෫ → ද ) SINHALA LITH DIGIT FIVE → SINHALA LETTER ALPAPRAANA DAYANNA # +0DC4 ; 0DB7 ; MA # ( හ → භ ) SINHALA LETTER HAYANNA → SINHALA LETTER MAHAAPRAANA BAYANNA # + +0D8D ; 0DC3 0DD8 ; MA # ( ඍ → සෘ ) SINHALA LETTER IRUYANNA → SINHALA LETTER DANTAJA SAYANNA, SINHALA VOWEL SIGN GAETTA-PILLA # + 11413 ; 11434 11442 11412 ; MA # ( 𑐓 → 𑐴𑑂𑐒 ) NEWA LETTER NGHA → NEWA LETTER HA, NEWA SIGN VIRAMA, NEWA LETTER NGA # 11419 ; 11434 11442 11418 ; MA # ( 𑐙 → 𑐴𑑂𑐘 ) NEWA LETTER NYHA → NEWA LETTER HA, NEWA SIGN VIRAMA, NEWA LETTER NYA # @@ -5944,11 +6201,13 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 0F79 ; 0FB3 0F71 0F80 ; MA # ( ཹ → ླཱྀ ) TIBETAN VOWEL SIGN VOCALIC LL → TIBETAN SUBJOINED LETTER LA, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN REVERSED I # -11CB2 ; 11CAA ; MA # ( 𑲲 → 𑲪 ) MARCHEN VOWEL SIGN U → MARCHEN SUBJOINED LETTER RA # +0F7B ; 0F7A 0F7A ; MA # ( ཻ → ེེ ) TIBETAN VOWEL SIGN EE → TIBETAN VOWEL SIGN E, TIBETAN VOWEL SIGN E # -1081 ; 1002 103E ; MA # ( ႁ → ဂှ ) MYANMAR LETTER SHAN HA → MYANMAR LETTER GA, MYANMAR CONSONANT SIGN MEDIAL HA # +0F7D ; 0F7C 0F7C ; MA # ( ཽ → ོོ ) TIBETAN VOWEL SIGN OO → TIBETAN VOWEL SIGN O, TIBETAN VOWEL SIGN O # -1000 ; 1002 102C ; MA # ( က → ဂာ ) MYANMAR LETTER KA → MYANMAR LETTER GA, MYANMAR VOWEL SIGN AA # +11CB2 ; 11CAA ; MA # ( 𑲲 → 𑲪 ) MARCHEN VOWEL SIGN U → MARCHEN SUBJOINED LETTER RA # + +1734 ; 1715 ; MA # ( ᜴ → ᜕ ) HANUNOO SIGN PAMUDPOD → TAGALOG SIGN PAMUDPOD # 1070 ; 1003 103E ; MA # ( ၰ → ဃှ ) MYANMAR LETTER EASTERN PWO KAREN GHWA → MYANMAR LETTER GHA, MYANMAR CONSONANT SIGN MEDIAL HA # @@ -5960,12 +6219,16 @@ FE19 ; 2D57 ; MA #* ( ︙ → ⵗ ) PRESENTATION FORM FOR VERTICAL HORIZONTAL EL 107E ; 107D 103E ; MA # ( ၾ → ၽှ ) MYANMAR LETTER SHAN FA → MYANMAR LETTER SHAN PHA, MYANMAR CONSONANT SIGN MEDIAL HA # +1061 ; 101B 103E ; MA # ( ၡ → ရှ ) MYANMAR LETTER SGAW KAREN SHA → MYANMAR LETTER RA, MYANMAR CONSONANT SIGN MEDIAL HA # + 1029 ; 101E 103C ; MA # ( ဩ → သြ ) MYANMAR LETTER O → MYANMAR LETTER SA, MYANMAR CONSONANT SIGN MEDIAL RA # -102A ; 101E 103C 1031 102C 103A ; MA # ( ဪ → သြော် ) MYANMAR LETTER AU → MYANMAR LETTER SA, MYANMAR CONSONANT SIGN MEDIAL RA, MYANMAR VOWEL SIGN E, MYANMAR VOWEL SIGN AA, MYANMAR SIGN ASAT # →ဩော်→ +102A ; 101E 103C 0B47 102C 103A ; MA # ( ဪ → သြେာ် ) MYANMAR LETTER AU → MYANMAR LETTER SA, MYANMAR CONSONANT SIGN MEDIAL RA, ORIYA VOWEL SIGN E, MYANMAR VOWEL SIGN AA, MYANMAR SIGN ASAT # →ဩော်→ 109E ; 1083 030A ; MA #* ( ႞ → ႃ̊ ) MYANMAR SYMBOL SHAN ONE → MYANMAR VOWEL SIGN SHAN AA, COMBINING RING ABOVE # →ႃံ→ +178F ; 178A ; MA # ( ត → ដ ) KHMER LETTER TA → KHMER LETTER DA # + 17A3 ; 17A2 ; MA # ( ឣ → អ ) KHMER INDEPENDENT VOWEL QAQ → KHMER LETTER QA # 19D0 ; 199E ; MA # ( ᧐ → ᦞ ) NEW TAI LUE DIGIT ZERO → NEW TAI LUE LETTER LOW VA # @@ -6273,6 +6536,7 @@ A4ED ; 1660 ; MA # ( ꓭ → ᙠ ) LISU LETTER GHA → CANADIAN SYLLABICS CARRIE 02E2 ; 18F5 ; MA # ( ˢ → ᣵ ) MODIFIER LETTER SMALL S → CANADIAN SYLLABICS CARRIER DENTAL S # 18DB ; 18F5 ; MA # ( ᣛ → ᣵ ) CANADIAN SYLLABICS OJIBWAY SH → CANADIAN SYLLABICS CARRIER DENTAL S # →ˢ→ +A7F1 ; 18F5 ; MA # ( ꟱ → ᣵ ) MODIFIER LETTER CAPITAL S → CANADIAN SYLLABICS CARRIER DENTAL S # →ˢ→ A6B0 ; 16B9 ; MA # ( ꚰ → ᚹ ) BAMUM LETTER TAA → RUNIC LETTER WUNJO WYNN W # @@ -6380,6 +6644,9 @@ D7CC ; 1102 110E ; MA # ( ퟌ → ᄂᄎ ) HANGUL JONGSEONG NIEUN-CHIEUCH → HA 11C8 ; 1102 1140 ; MA # ( ᇈ → ᄂᅀ ) HANGUL JONGSEONG NIEUN-PANSIOS → HANGUL CHOSEONG NIEUN, HANGUL CHOSEONG PANSIOS # →ᆫᇫ→ 3168 ; 1102 1140 ; MA # ( ㅨ → ᄂᅀ ) HANGUL LETTER NIEUN-PANSIOS → HANGUL CHOSEONG NIEUN, HANGUL CHOSEONG PANSIOS # →ᇈ→→ᆫᇫ→ +723F ; 1102 116E 4E28 ; MA # ( 爿 → 누丨 ) CJK UNIFIED IDEOGRAPH-723F → HANGUL CHOSEONG NIEUN, HANGUL JUNGSEONG U, CJK UNIFIED IDEOGRAPH-4E28 # →뉘→→누ᅵ→ +2F59 ; 1102 116E 4E28 ; MA #* ( ⽙ → 누丨 ) KANGXI RADICAL HALF TREE TRUNK → HANGUL CHOSEONG NIEUN, HANGUL JUNGSEONG U, CJK UNIFIED IDEOGRAPH-4E28 # →爿→→뉘→→누ᅵ→ + 3137 ; 1103 ; MA # ( ㄷ → ᄃ ) HANGUL LETTER TIKEUT → HANGUL CHOSEONG TIKEUT # 11AE ; 1103 ; MA # ( ᆮ → ᄃ ) HANGUL JONGSEONG TIKEUT → HANGUL CHOSEONG TIKEUT # @@ -6548,6 +6815,8 @@ D7E2 ; 1106 110C ; MA # ( ퟢ → ᄆᄌ ) HANGUL JONGSEONG MIEUM-CIEUC → HANG 11DF ; 1106 1140 ; MA # ( ᇟ → ᄆᅀ ) HANGUL JONGSEONG MIEUM-PANSIOS → HANGUL CHOSEONG MIEUM, HANGUL CHOSEONG PANSIOS # →ᆷᇫ→ 3170 ; 1106 1140 ; MA # ( ㅰ → ᄆᅀ ) HANGUL LETTER MIEUM-PANSIOS → HANGUL CHOSEONG MIEUM, HANGUL CHOSEONG PANSIOS # →ᇟ→→ᆷᇫ→ +535F ; 1106 1161 ; MA # ( 卟 → 마 ) CJK UNIFIED IDEOGRAPH-535F → HANGUL CHOSEONG MIEUM, HANGUL JUNGSEONG A # + 3142 ; 1107 ; MA # ( ㅂ → ᄇ ) HANGUL LETTER PIEUP → HANGUL CHOSEONG PIEUP # 11B8 ; 1107 ; MA # ( ᆸ → ᄇ ) HANGUL JONGSEONG PIEUP → HANGUL CHOSEONG PIEUP # @@ -6617,6 +6886,10 @@ A974 ; 1107 1112 ; MA # ( ꥴ → ᄇᄒ ) HANGUL CHOSEONG PIEUP-HIEUH → HANGU 3145 ; 1109 ; MA # ( ㅅ → ᄉ ) HANGUL LETTER SIOS → HANGUL CHOSEONG SIOS # 11BA ; 1109 ; MA # ( ᆺ → ᄉ ) HANGUL JONGSEONG SIOS → HANGUL CHOSEONG SIOS # +4ECA ; 1109 30FC 1100 ; MA # ( 今 → ᄉーᄀ ) CJK UNIFIED IDEOGRAPH-4ECA → HANGUL CHOSEONG SIOS, KATAKANA-HIRAGANA PROLONGED SOUND MARK, HANGUL CHOSEONG KIYEOK # →슥→→스ᄀ→ + +5408 ; 1109 30FC 1106 ; MA # ( 合 → ᄉーᄆ ) CJK UNIFIED IDEOGRAPH-5408 → HANGUL CHOSEONG SIOS, KATAKANA-HIRAGANA PROLONGED SOUND MARK, HANGUL CHOSEONG MIEUM # →슴→→스ᄆ→ + 112D ; 1109 1100 ; MA # ( ᄭ → ᄉᄀ ) HANGUL CHOSEONG SIOS-KIYEOK → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG KIYEOK # 317A ; 1109 1100 ; MA # ( ㅺ → ᄉᄀ ) HANGUL LETTER SIOS-KIYEOK → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG KIYEOK # →ᄭ→ 11E7 ; 1109 1100 ; MA # ( ᇧ → ᄉᄀ ) HANGUL JONGSEONG SIOS-KIYEOK → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG KIYEOK # →ᄭ→ @@ -6646,6 +6919,8 @@ D7EB ; 1109 1107 110B ; MA # ( ퟫ → ᄉᄇᄋ ) HANGUL JONGSEONG SIOS-KAPYEOU 3146 ; 1109 1109 ; MA # ( ㅆ → ᄉᄉ ) HANGUL LETTER SSANGSIOS → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG SIOS # →ᄊ→ 11BB ; 1109 1109 ; MA # ( ᆻ → ᄉᄉ ) HANGUL JONGSEONG SSANGSIOS → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG SIOS # →ᄊ→ +4E1B ; 1109 1109 30FC ; MA # ( 丛 → ᄉᄉー ) CJK UNIFIED IDEOGRAPH-4E1B → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG SIOS, KATAKANA-HIRAGANA PROLONGED SOUND MARK # →쓰→→ᄉ스→ + D7EC ; 1109 1109 1100 ; MA # ( ퟬ → ᄉᄉᄀ ) HANGUL JONGSEONG SSANGSIOS-KIYEOK → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG SIOS, HANGUL CHOSEONG KIYEOK # →ᆺᆺᆨ→ D7ED ; 1109 1109 1103 ; MA # ( ퟭ → ᄉᄉᄃ ) HANGUL JONGSEONG SSANGSIOS-TIKEUT → HANGUL CHOSEONG SIOS, HANGUL CHOSEONG SIOS, HANGUL CHOSEONG TIKEUT # →ᆺᆺᆮ→ @@ -6727,6 +7002,8 @@ D7F9 ; 110C 110C ; MA # ( ퟹ → ᄌᄌ ) HANGUL JONGSEONG SSANGCIEUC → HANGU A978 ; 110C 110C 1112 ; MA # ( ꥸ → ᄌᄌᄒ ) HANGUL CHOSEONG SSANGCIEUC-HIEUH → HANGUL CHOSEONG CIEUC, HANGUL CHOSEONG CIEUC, HANGUL CHOSEONG HIEUH # +4E15 ; 110C 1169 ; MA # ( 丕 → 조 ) CJK UNIFIED IDEOGRAPH-4E15 → HANGUL CHOSEONG CIEUC, HANGUL JUNGSEONG O # + 314A ; 110E ; MA # ( ㅊ → ᄎ ) HANGUL LETTER CHIEUCH → HANGUL CHOSEONG CHIEUCH # 11BE ; 110E ; MA # ( ᆾ → ᄎ ) HANGUL JONGSEONG CHIEUCH → HANGUL CHOSEONG CHIEUCH # @@ -6740,6 +7017,10 @@ A978 ; 110C 110C 1112 ; MA # ( ꥸ → ᄌᄌᄒ ) HANGUL CHOSEONG SSANGCIEUC-HI 314C ; 1110 ; MA # ( ㅌ → ᄐ ) HANGUL LETTER THIEUTH → HANGUL CHOSEONG THIEUTH # 11C0 ; 1110 ; MA # ( ᇀ → ᄐ ) HANGUL JONGSEONG THIEUTH → HANGUL CHOSEONG THIEUTH # +9577 ; 1110 30FC 1102 110C ; MA # ( 長 → ᄐーᄂᄌ ) CJK UNIFIED IDEOGRAPH-9577 → HANGUL CHOSEONG THIEUTH, KATAKANA-HIRAGANA PROLONGED SOUND MARK, HANGUL CHOSEONG NIEUN, HANGUL CHOSEONG CIEUC # →튽→→트ᄂᄌ→ +2ED1 ; 1110 30FC 1102 110C ; MA #* ( ⻑ → ᄐーᄂᄌ ) CJK RADICAL LONG ONE → HANGUL CHOSEONG THIEUTH, KATAKANA-HIRAGANA PROLONGED SOUND MARK, HANGUL CHOSEONG NIEUN, HANGUL CHOSEONG CIEUC # →長→→튽→→트ᄂᄌ→ +2FA7 ; 1110 30FC 1102 110C ; MA #* ( ⾧ → ᄐーᄂᄌ ) KANGXI RADICAL LONG → HANGUL CHOSEONG THIEUTH, KATAKANA-HIRAGANA PROLONGED SOUND MARK, HANGUL CHOSEONG NIEUN, HANGUL CHOSEONG CIEUC # →長→→튽→→트ᄂᄌ→ + A979 ; 1110 1110 ; MA # ( ꥹ → ᄐᄐ ) HANGUL CHOSEONG SSANGTHIEUTH → HANGUL CHOSEONG THIEUTH, HANGUL CHOSEONG THIEUTH # 314D ; 1111 ; MA # ( ㅍ → ᄑ ) HANGUL LETTER PHIEUPH → HANGUL CHOSEONG PHIEUPH # @@ -6964,6 +7245,8 @@ D7C6 ; 119E 1165 4E28 ; MA # ( ퟆ → ᆞᅥ丨 ) HANGUL JUNGSEONG ARAEA-E → 2341 ; 303C ; MA #* ( ⍁ → 〼 ) APL FUNCTIONAL SYMBOL QUAD SLASH → MASU MARK # →⧄→ 29C4 ; 303C ; MA #* ( ⧄ → 〼 ) SQUARED RISING DIAGONAL SLASH → MASU MARK # +4E8E ; 1B122 ; MA # ( 于 → 𛄢 ) CJK UNIFIED IDEOGRAPH-4E8E → KATAKANA LETTER ARCHAIC WU # + A49E ; A04A ; MA #* ( ꒞ → ꁊ ) YI RADICAL PUT → YI SYLLABLE PUT # A4AC ; A050 ; MA #* ( ꒬ → ꁐ ) YI RADICAL PYT → YI SYLLABLE PYT # @@ -7185,7 +7468,9 @@ FA31 ; 50E7 ; MA # ( 僧 → 僧 ) CJK COMPATIBILITY IDEOGRAPH-FA31 → CJK UNIF 2F80C ; 349E ; MA # ( 㒞 → 㒞 ) CJK COMPATIBILITY IDEOGRAPH-2F80C → CJK UNIFIED IDEOGRAPH-349E # +3126 ; 513F ; MA # ( ㄦ → 儿 ) BOPOMOFO LETTER ER → CJK UNIFIED IDEOGRAPH-513F # 2F09 ; 513F ; MA #* ( ⼉ → 儿 ) KANGXI RADICAL LEGS → CJK UNIFIED IDEOGRAPH-513F # +16FF2 ; 513F ; MA # ( 𖿲 → 儿 ) CHINESE SMALL SIMPLIFIED ER → CJK UNIFIED IDEOGRAPH-513F # FA0C ; 5140 ; MA # ( 兀 → 兀 ) CJK COMPATIBILITY IDEOGRAPH-FA0C → CJK UNIFIED IDEOGRAPH-5140 # 2E8E ; 5140 ; MA #* ( ⺎ → 兀 ) CJK RADICAL LAME ONE → CJK UNIFIED IDEOGRAPH-5140 # @@ -7265,6 +7550,7 @@ FA15 ; 51DE ; MA # ( 凞 → 凞 ) CJK COMPATIBILITY IDEOGRAPH-FA15 → CJK UNIF 2F81D ; 51F5 ; MA # ( 凵 → 凵 ) CJK COMPATIBILITY IDEOGRAPH-2F81D → CJK UNIFIED IDEOGRAPH-51F5 # 2F10 ; 51F5 ; MA #* ( ⼐ → 凵 ) KANGXI RADICAL OPEN BOX → CJK UNIFIED IDEOGRAPH-51F5 # +20674 ; 51F5 ; MA # ( 𠙴 → 凵 ) CJK UNIFIED IDEOGRAPH-20674 → CJK UNIFIED IDEOGRAPH-51F5 # →凵→ 2F11 ; 5200 ; MA #* ( ⼑ → 刀 ) KANGXI RADICAL KNIFE → CJK UNIFIED IDEOGRAPH-5200 # @@ -7355,6 +7641,7 @@ F9EB ; 533F ; MA # ( 匿 → 匿 ) CJK COMPATIBILITY IDEOGRAPH-F9EB → CJK UNIF FA35 ; 5351 ; MA # ( 卑 → 卑 ) CJK COMPATIBILITY IDEOGRAPH-FA35 → CJK UNIFIED IDEOGRAPH-5351 # 2F82D ; 5351 ; MA # ( 卑 → 卑 ) CJK COMPATIBILITY IDEOGRAPH-2F82D → CJK UNIFIED IDEOGRAPH-5351 # +2D161 ; 5351 ; MA # ( 𭅡 → 卑 ) CJK UNIFIED IDEOGRAPH-2D161 → CJK UNIFIED IDEOGRAPH-5351 # →卑→ 2F82E ; 535A ; MA # ( 博 → 博 ) CJK COMPATIBILITY IDEOGRAPH-2F82E → CJK UNIFIED IDEOGRAPH-535A # @@ -7515,6 +7802,7 @@ F942 ; 58DF ; MA # ( 壟 → 壟 ) CJK COMPATIBILITY IDEOGRAPH-F942 → CJK UNIF 2F85A ; 58F2 ; MA # ( 売 → 売 ) CJK COMPATIBILITY IDEOGRAPH-2F85A → CJK UNIFIED IDEOGRAPH-58F2 # 2F85B ; 58F7 ; MA # ( 壷 → 壷 ) CJK COMPATIBILITY IDEOGRAPH-2F85B → CJK UNIFIED IDEOGRAPH-58F7 # +21533 ; 58F7 ; MA # ( 𡔳 → 壷 ) CJK UNIFIED IDEOGRAPH-21533 → CJK UNIFIED IDEOGRAPH-58F7 # →壷→ 2F21 ; 5902 ; MA #* ( ⼡ → 夂 ) KANGXI RADICAL GO → CJK UNIFIED IDEOGRAPH-5902 # @@ -7526,6 +7814,7 @@ F942 ; 58DF ; MA # ( 壟 → 壟 ) CJK COMPATIBILITY IDEOGRAPH-F942 → CJK UNIF 2F23 ; 5915 ; MA #* ( ⼣ → 夕 ) KANGXI RADICAL EVENING → CJK UNIFIED IDEOGRAPH-5915 # 2F85D ; 591A ; MA # ( 多 → 多 ) CJK COMPATIBILITY IDEOGRAPH-2F85D → CJK UNIFIED IDEOGRAPH-591A # +21587 ; 591A ; MA # ( 𡖇 → 多 ) CJK UNIFIED IDEOGRAPH-21587 → CJK UNIFIED IDEOGRAPH-591A # →多→ 2F85E ; 5922 ; MA # ( 夢 → 夢 ) CJK COMPATIBILITY IDEOGRAPH-2F85E → CJK UNIFIED IDEOGRAPH-5922 # @@ -7544,6 +7833,7 @@ F909 ; 5951 ; MA # ( 契 → 契 ) CJK COMPATIBILITY IDEOGRAPH-F909 → CJK UNIF F981 ; 5973 ; MA # ( 女 → 女 ) CJK COMPATIBILITY IDEOGRAPH-F981 → CJK UNIFIED IDEOGRAPH-5973 # 2F25 ; 5973 ; MA #* ( ⼥ → 女 ) KANGXI RADICAL WOMAN → CJK UNIFIED IDEOGRAPH-5973 # +216A7 ; 216A8 ; MA # ( 𡚧 → 𡚨 ) CJK UNIFIED IDEOGRAPH-216A7 → CJK UNIFIED IDEOGRAPH-216A8 # →𡚨→ 2F860 ; 216A8 ; MA # ( 𡚨 → 𡚨 ) CJK COMPATIBILITY IDEOGRAPH-2F860 → CJK UNIFIED IDEOGRAPH-216A8 # 2F861 ; 216EA ; MA # ( 𡛪 → 𡛪 ) CJK COMPATIBILITY IDEOGRAPH-2F861 → CJK UNIFIED IDEOGRAPH-216EA # @@ -7634,6 +7924,7 @@ FA3C ; 5C6E ; MA # ( 屮 → 屮 ) CJK COMPATIBILITY IDEOGRAPH-FA3C → CJK UNIF 2F2D ; 5C71 ; MA #* ( ⼭ → 山 ) KANGXI RADICAL MOUNTAIN → CJK UNIFIED IDEOGRAPH-5C71 # 2F879 ; 5CC0 ; MA # ( 峀 → 峀 ) CJK COMPATIBILITY IDEOGRAPH-2F879 → CJK UNIFIED IDEOGRAPH-5CC0 # +2B73A ; 5CC0 ; MA # ( 𫜺 → 峀 ) CJK UNIFIED IDEOGRAPH-2B73A → CJK UNIFIED IDEOGRAPH-5CC0 # 2F87A ; 5C8D ; MA # ( 岍 → 岍 ) CJK COMPATIBILITY IDEOGRAPH-2F87A → CJK UNIFIED IDEOGRAPH-5C8D # @@ -7759,6 +8050,7 @@ F9D8 ; 5F8B ; MA # ( 律 → 律 ) CJK COMPATIBILITY IDEOGRAPH-F9D8 → CJK UNIF 2F89B ; 38E3 ; MA # ( 㣣 → 㣣 ) CJK COMPATIBILITY IDEOGRAPH-2F89B → CJK UNIFIED IDEOGRAPH-38E3 # +22505 ; 5F9A ; MA # ( 𢔅 → 徚 ) CJK UNIFIED IDEOGRAPH-22505 → CJK UNIFIED IDEOGRAPH-5F9A # →徚→ 2F89C ; 5F9A ; MA # ( 徚 → 徚 ) CJK COMPATIBILITY IDEOGRAPH-2F89C → CJK UNIFIED IDEOGRAPH-5F9A # F966 ; 5FA9 ; MA # ( 復 → 復 ) CJK COMPATIBILITY IDEOGRAPH-F966 → CJK UNIFIED IDEOGRAPH-5FA9 # @@ -7900,16 +8192,16 @@ FA8D ; 63C4 ; MA # ( 揄 → 揄 ) CJK COMPATIBILITY IDEOGRAPH-FA8D → CJK UNIF 2F8BD ; 63E4 ; MA # ( 揤 → 揤 ) CJK COMPATIBILITY IDEOGRAPH-2F8BD → CJK UNIFIED IDEOGRAPH-63E4 # -FA8F ; 6452 ; MA # ( 摒 → 摒 ) CJK COMPATIBILITY IDEOGRAPH-FA8F → CJK UNIFIED IDEOGRAPH-6452 # +FA8E ; 641C ; MA # ( 搜 → 搜 ) CJK COMPATIBILITY IDEOGRAPH-FA8E → CJK UNIFIED IDEOGRAPH-641C # 2F8BE ; 22BF1 ; MA # ( 𢯱 → 𢯱 ) CJK COMPATIBILITY IDEOGRAPH-2F8BE → CJK UNIFIED IDEOGRAPH-22BF1 # -FA8E ; 641C ; MA # ( 搜 → 搜 ) CJK COMPATIBILITY IDEOGRAPH-FA8E → CJK UNIFIED IDEOGRAPH-641C # - 2F8BF ; 6422 ; MA # ( 搢 → 搢 ) CJK COMPATIBILITY IDEOGRAPH-2F8BF → CJK UNIFIED IDEOGRAPH-6422 # 2F8C0 ; 63C5 ; MA # ( 揅 → 揅 ) CJK COMPATIBILITY IDEOGRAPH-2F8C0 → CJK UNIFIED IDEOGRAPH-63C5 # +FA8F ; 6452 ; MA # ( 摒 → 摒 ) CJK COMPATIBILITY IDEOGRAPH-FA8F → CJK UNIFIED IDEOGRAPH-6452 # + 2F8C3 ; 6469 ; MA # ( 摩 → 摩 ) CJK COMPATIBILITY IDEOGRAPH-2F8C3 → CJK UNIFIED IDEOGRAPH-6469 # 2F8C6 ; 6477 ; MA # ( 摷 → 摷 ) CJK COMPATIBILITY IDEOGRAPH-2F8C6 → CJK UNIFIED IDEOGRAPH-6477 # @@ -8008,6 +8300,7 @@ F901 ; 66F4 ; MA # ( 更 → 更 ) CJK COMPATIBILITY IDEOGRAPH-F901 → CJK UNIF 2F49 ; 6708 ; MA #* ( ⽉ → 月 ) KANGXI RADICAL MOON → CJK UNIFIED IDEOGRAPH-6708 # 2F980 ; 2335F ; MA # ( 𣍟 → 𣍟 ) CJK COMPATIBILITY IDEOGRAPH-2F980 → CJK UNIFIED IDEOGRAPH-2335F # +2B73E ; 2335F ; MA # ( 𫜾 → 𣍟 ) CJK UNIFIED IDEOGRAPH-2B73E → CJK UNIFIED IDEOGRAPH-2335F # 80A6 ; 670C ; MA # ( 肦 → 朌 ) CJK UNIFIED IDEOGRAPH-80A6 → CJK UNIFIED IDEOGRAPH-670C # @@ -8215,6 +8508,7 @@ FA45 ; 6D77 ; MA # ( 海 → 海 ) CJK COMPATIBILITY IDEOGRAPH-FA45 → CJK UNIF 2F904 ; 6D78 ; MA # ( 浸 → 浸 ) CJK COMPATIBILITY IDEOGRAPH-2F904 → CJK UNIFIED IDEOGRAPH-6D78 # 2F905 ; 6D85 ; MA # ( 涅 → 涅 ) CJK COMPATIBILITY IDEOGRAPH-2F905 → CJK UNIFIED IDEOGRAPH-6D85 # +23D40 ; 6D85 ; MA # ( 𣵀 → 涅 ) CJK UNIFIED IDEOGRAPH-23D40 → CJK UNIFIED IDEOGRAPH-6D85 # →涅→ 2F906 ; 23D1E ; MA # ( 𣴞 → 𣴞 ) CJK COMPATIBILITY IDEOGRAPH-2F906 → CJK UNIFIED IDEOGRAPH-23D1E # @@ -8338,8 +8632,6 @@ FA9E ; 7235 ; MA # ( 爵 → 爵 ) CJK COMPATIBILITY IDEOGRAPH-FA9E → CJK UNIF 2EA6 ; 4E2C ; MA #* ( ⺦ → 丬 ) CJK RADICAL SIMPLIFIED HALF TREE TRUNK → CJK UNIFIED IDEOGRAPH-4E2C # -2F59 ; 723F ; MA #* ( ⽙ → 爿 ) KANGXI RADICAL HALF TREE TRUNK → CJK UNIFIED IDEOGRAPH-723F # - 2F5A ; 7247 ; MA #* ( ⽚ → 片 ) KANGXI RADICAL SLICE → CJK UNIFIED IDEOGRAPH-7247 # 2F922 ; 7250 ; MA # ( 牐 → 牐 ) CJK COMPATIBILITY IDEOGRAPH-2F922 → CJK UNIFIED IDEOGRAPH-7250 # @@ -8371,6 +8663,7 @@ F92B ; 72FC ; MA # ( 狼 → 狼 ) CJK COMPATIBILITY IDEOGRAPH-F92B → CJK UNIF FA16 ; 732A ; MA # ( 猪 → 猪 ) CJK COMPATIBILITY IDEOGRAPH-FA16 → CJK UNIFIED IDEOGRAPH-732A # FAA0 ; 732A ; MA # ( 猪 → 猪 ) CJK COMPATIBILITY IDEOGRAPH-FAA0 → CJK UNIFIED IDEOGRAPH-732A # +2AEC5 ; 24814 ; MA # ( 𪻅 → 𤠔 ) CJK UNIFIED IDEOGRAPH-2AEC5 → CJK UNIFIED IDEOGRAPH-24814 # →𤠔→ 2F927 ; 24814 ; MA # ( 𤠔 → 𤠔 ) CJK COMPATIBILITY IDEOGRAPH-2F927 → CJK UNIFIED IDEOGRAPH-24814 # F9A7 ; 7375 ; MA # ( 獵 → 獵 ) CJK COMPATIBILITY IDEOGRAPH-F9A7 → CJK UNIFIED IDEOGRAPH-7375 # @@ -8389,6 +8682,7 @@ F9DB ; 7387 ; MA # ( 率 → 率 ) CJK COMPATIBILITY IDEOGRAPH-F9DB → CJK UNIF 2F92A ; 3EAC ; MA # ( 㺬 → 㺬 ) CJK COMPATIBILITY IDEOGRAPH-2F92A → CJK UNIFIED IDEOGRAPH-3EAC # 2F92B ; 73A5 ; MA # ( 玥 → 玥 ) CJK COMPATIBILITY IDEOGRAPH-2F92B → CJK UNIFIED IDEOGRAPH-73A5 # +248FD ; 73A5 ; MA # ( 𤣽 → 玥 ) CJK UNIFIED IDEOGRAPH-248FD → CJK UNIFIED IDEOGRAPH-73A5 # →玥→ F9AD ; 73B2 ; MA # ( 玲 → 玲 ) CJK COMPATIBILITY IDEOGRAPH-F9AD → CJK UNIFIED IDEOGRAPH-73B2 # @@ -8508,6 +8802,7 @@ F96D ; 7701 ; MA # ( 省 → 省 ) CJK COMPATIBILITY IDEOGRAPH-F96D → CJK UNIF FAD3 ; 4018 ; MA # ( 䀘 → 䀘 ) CJK COMPATIBILITY IDEOGRAPH-FAD3 → CJK UNIFIED IDEOGRAPH-4018 # 2F943 ; 25119 ; MA # ( 𥄙 → 𥄙 ) CJK COMPATIBILITY IDEOGRAPH-2F943 → CJK UNIFIED IDEOGRAPH-25119 # +2511A ; 25119 ; MA # ( 𥄚 → 𥄙 ) CJK UNIFIED IDEOGRAPH-2511A → CJK UNIFIED IDEOGRAPH-25119 # →𥄙→ 2F945 ; 771E ; MA # ( 眞 → 眞 ) CJK COMPATIBILITY IDEOGRAPH-2F945 → CJK UNIFIED IDEOGRAPH-771E # @@ -8717,6 +9012,7 @@ F93D ; 7DA0 ; MA # ( 綠 → 綠 ) CJK COMPATIBILITY IDEOGRAPH-F93D → CJK UNIF F957 ; 7DBE ; MA # ( 綾 → 綾 ) CJK COMPATIBILITY IDEOGRAPH-F957 → CJK UNIFIED IDEOGRAPH-7DBE # 2F96E ; 7DC7 ; MA # ( 緇 → 緇 ) CJK COMPATIBILITY IDEOGRAPH-2F96E → CJK UNIFIED IDEOGRAPH-7DC7 # +31E7C ; 7DC7 ; MA # ( 𱹼 → 緇 ) CJK UNIFIED IDEOGRAPH-31E7C → CJK UNIFIED IDEOGRAPH-7DC7 # →緇→ F996 ; 7DF4 ; MA # ( 練 → 練 ) CJK COMPATIBILITY IDEOGRAPH-F996 → CJK UNIFIED IDEOGRAPH-7DF4 # FA57 ; 7DF4 ; MA # ( 練 → 練 ) CJK COMPATIBILITY IDEOGRAPH-FA57 → CJK UNIFIED IDEOGRAPH-7DF4 # @@ -8801,6 +9097,7 @@ F9B0 ; 8046 ; MA # ( 聆 → 聆 ) CJK COMPATIBILITY IDEOGRAPH-F9B0 → CJK UNIF 2F97D ; 8060 ; MA # ( 聠 → 聠 ) CJK COMPATIBILITY IDEOGRAPH-2F97D → CJK UNIFIED IDEOGRAPH-8060 # +2659D ; 265A8 ; MA # ( 𦖝 → 𦖨 ) CJK UNIFIED IDEOGRAPH-2659D → CJK UNIFIED IDEOGRAPH-265A8 # →𦖨→ 2F97E ; 265A8 ; MA # ( 𦖨 → 𦖨 ) CJK COMPATIBILITY IDEOGRAPH-2F97E → CJK UNIFIED IDEOGRAPH-265A8 # F997 ; 806F ; MA # ( 聯 → 聯 ) CJK COMPATIBILITY IDEOGRAPH-F997 → CJK UNIFIED IDEOGRAPH-806F # @@ -8935,6 +9232,7 @@ FA5F ; 8457 ; MA # ( 著 → 著 ) CJK COMPATIBILITY IDEOGRAPH-FA5F → CJK UNIF 2F99F ; 8457 ; MA # ( 著 → 著 ) CJK COMPATIBILITY IDEOGRAPH-2F99F → CJK UNIFIED IDEOGRAPH-8457 # 2F9A4 ; 26C36 ; MA # ( 𦰶 → 𦰶 ) CJK COMPATIBILITY IDEOGRAPH-2F9A4 → CJK UNIFIED IDEOGRAPH-26C36 # +26D06 ; 26C36 ; MA # ( 𦴆 → 𦰶 ) CJK UNIFIED IDEOGRAPH-26D06 → CJK UNIFIED IDEOGRAPH-26C36 # →𦰶→ 2F99B ; 83AD ; MA # ( 莭 → 莭 ) CJK COMPATIBILITY IDEOGRAPH-2F99B → CJK UNIFIED IDEOGRAPH-83AD # @@ -9081,14 +9379,17 @@ FAB7 ; 8986 ; MA # ( 覆 → 覆 ) CJK COMPATIBILITY IDEOGRAPH-FAB7 → CJK UNIF FA0A ; 898B ; MA # ( 見 → 見 ) CJK COMPATIBILITY IDEOGRAPH-FA0A → CJK UNIFIED IDEOGRAPH-898B # 2F92 ; 898B ; MA #* ( ⾒ → 見 ) KANGXI RADICAL SEE → CJK UNIFIED IDEOGRAPH-898B # -2F9CB ; 278AE ; MA # ( 𧢮 → 𧢮 ) CJK COMPATIBILITY IDEOGRAPH-2F9CB → CJK UNIFIED IDEOGRAPH-278AE # - 2EC5 ; 89C1 ; MA #* ( ⻅ → 见 ) CJK RADICAL C-SIMPLIFIED SEE → CJK UNIFIED IDEOGRAPH-89C1 # +4695 ; 278AE ; MA # ( 䚕 → 𧢮 ) CJK UNIFIED IDEOGRAPH-4695 → CJK UNIFIED IDEOGRAPH-278AE # →𧢮→ +2F9CB ; 278AE ; MA # ( 𧢮 → 𧢮 ) CJK COMPATIBILITY IDEOGRAPH-2F9CB → CJK UNIFIED IDEOGRAPH-278AE # + 2F93 ; 89D2 ; MA #* ( ⾓ → 角 ) KANGXI RADICAL HORN → CJK UNIFIED IDEOGRAPH-89D2 # 2F94 ; 8A00 ; MA #* ( ⾔ → 言 ) KANGXI RADICAL SPEECH → CJK UNIFIED IDEOGRAPH-8A00 # +2EC8 ; 8BA0 ; MA #* ( ⻈ → 讠 ) CJK RADICAL C-SIMPLIFIED SPEECH → CJK UNIFIED IDEOGRAPH-8BA0 # + 2F9CC ; 27966 ; MA # ( 𧥦 → 𧥦 ) CJK COMPATIBILITY IDEOGRAPH-2F9CC → CJK UNIFIED IDEOGRAPH-27966 # 8A7D ; 8A2E ; MA # ( 詽 → 訮 ) CJK UNIFIED IDEOGRAPH-8A7D → CJK UNIFIED IDEOGRAPH-8A2E # @@ -9136,8 +9437,6 @@ F95A ; 8B80 ; MA # ( 讀 → 讀 ) CJK COMPATIBILITY IDEOGRAPH-F95A → CJK UNIF FAC0 ; 8B8A ; MA # ( 變 → 變 ) CJK COMPATIBILITY IDEOGRAPH-FAC0 → CJK UNIFIED IDEOGRAPH-8B8A # 2F9D1 ; 8B8A ; MA # ( 變 → 變 ) CJK COMPATIBILITY IDEOGRAPH-2F9D1 → CJK UNIFIED IDEOGRAPH-8B8A # -2EC8 ; 8BA0 ; MA #* ( ⻈ → 讠 ) CJK RADICAL C-SIMPLIFIED SPEECH → CJK UNIFIED IDEOGRAPH-8BA0 # - 2F95 ; 8C37 ; MA #* ( ⾕ → 谷 ) KANGXI RADICAL VALLEY → CJK UNIFIED IDEOGRAPH-8C37 # 2F96 ; 8C46 ; MA #* ( ⾖ → 豆 ) KANGXI RADICAL BEAN → CJK UNIFIED IDEOGRAPH-8C46 # @@ -9155,6 +9454,8 @@ F900 ; 8C48 ; MA # ( 豈 → 豈 ) CJK COMPATIBILITY IDEOGRAPH-F900 → CJK UNIF 2F99 ; 8C9D ; MA #* ( ⾙ → 貝 ) KANGXI RADICAL SHELL → CJK UNIFIED IDEOGRAPH-8C9D # +2EC9 ; 8D1D ; MA #* ( ⻉ → 贝 ) CJK RADICAL C-SIMPLIFIED SHELL → CJK UNIFIED IDEOGRAPH-8D1D # + 2F9D4 ; 8CAB ; MA # ( 貫 → 貫 ) CJK COMPATIBILITY IDEOGRAPH-2F9D4 → CJK UNIFIED IDEOGRAPH-8CAB # 2F9D5 ; 8CC1 ; MA # ( 賁 → 賁 ) CJK COMPATIBILITY IDEOGRAPH-2F9D5 → CJK UNIFIED IDEOGRAPH-8CC1 # @@ -9168,10 +9469,9 @@ FA64 ; 8CD3 ; MA # ( 賓 → 賓 ) CJK COMPATIBILITY IDEOGRAPH-FA64 → CJK UNIF FA65 ; 8D08 ; MA # ( 贈 → 贈 ) CJK COMPATIBILITY IDEOGRAPH-FA65 → CJK UNIFIED IDEOGRAPH-8D08 # FAC1 ; 8D08 ; MA # ( 贈 → 贈 ) CJK COMPATIBILITY IDEOGRAPH-FAC1 → CJK UNIFIED IDEOGRAPH-8D08 # +25AD4 ; 8D1B ; MA # ( 𥫔 → 贛 ) CJK UNIFIED IDEOGRAPH-25AD4 → CJK UNIFIED IDEOGRAPH-8D1B # →贛→ 2F9D6 ; 8D1B ; MA # ( 贛 → 贛 ) CJK COMPATIBILITY IDEOGRAPH-2F9D6 → CJK UNIFIED IDEOGRAPH-8D1B # -2EC9 ; 8D1D ; MA #* ( ⻉ → 贝 ) CJK RADICAL C-SIMPLIFIED SHELL → CJK UNIFIED IDEOGRAPH-8D1D # - 2F9A ; 8D64 ; MA #* ( ⾚ → 赤 ) KANGXI RADICAL RED → CJK UNIFIED IDEOGRAPH-8D64 # 2F9B ; 8D70 ; MA #* ( ⾛ → 走 ) KANGXI RADICAL RUN → CJK UNIFIED IDEOGRAPH-8D70 # @@ -9203,6 +9503,8 @@ F937 ; 8DEF ; MA # ( 路 → 路 ) CJK COMPATIBILITY IDEOGRAPH-F937 → CJK UNIF F902 ; 8ECA ; MA # ( 車 → 車 ) CJK COMPATIBILITY IDEOGRAPH-F902 → CJK UNIFIED IDEOGRAPH-8ECA # 2F9E ; 8ECA ; MA #* ( ⾞ → 車 ) KANGXI RADICAL CART → CJK UNIFIED IDEOGRAPH-8ECA # +2ECB ; 8F66 ; MA #* ( ⻋ → 车 ) CJK RADICAL C-SIMPLIFIED CART → CJK UNIFIED IDEOGRAPH-8F66 # + 2F9DE ; 8ED4 ; MA # ( 軔 → 軔 ) CJK COMPATIBILITY IDEOGRAPH-2F9DE → CJK UNIFIED IDEOGRAPH-8ED4 # 8F27 ; 8EFF ; MA # ( 輧 → 軿 ) CJK UNIFIED IDEOGRAPH-8F27 → CJK UNIFIED IDEOGRAPH-8EFF # @@ -9218,8 +9520,6 @@ FA07 ; 8F3B ; MA # ( 輻 → 輻 ) CJK COMPATIBILITY IDEOGRAPH-FA07 → CJK UNIF F98D ; 8F62 ; MA # ( 轢 → 轢 ) CJK COMPATIBILITY IDEOGRAPH-F98D → CJK UNIFIED IDEOGRAPH-8F62 # -2ECB ; 8F66 ; MA #* ( ⻋ → 车 ) CJK RADICAL C-SIMPLIFIED CART → CJK UNIFIED IDEOGRAPH-8F66 # - 2F9F ; 8F9B ; MA #* ( ⾟ → 辛 ) KANGXI RADICAL BITTER → CJK UNIFIED IDEOGRAPH-8F9B # 2F98D ; 8F9E ; MA # ( 辞 → 辞 ) CJK COMPATIBILITY IDEOGRAPH-2F98D → CJK UNIFIED IDEOGRAPH-8F9E # @@ -9286,6 +9586,8 @@ F97E ; 91CF ; MA # ( 量 → 量 ) CJK COMPATIBILITY IDEOGRAPH-F97E → CJK UNIF F90A ; 91D1 ; MA # ( 金 → 金 ) CJK COMPATIBILITY IDEOGRAPH-F90A → CJK UNIFIED IDEOGRAPH-91D1 # 2FA6 ; 91D1 ; MA #* ( ⾦ → 金 ) KANGXI RADICAL GOLD → CJK UNIFIED IDEOGRAPH-91D1 # +2ED0 ; 9485 ; MA #* ( ⻐ → 钅 ) CJK RADICAL C-SIMPLIFIED GOLD → CJK UNIFIED IDEOGRAPH-9485 # + F9B1 ; 9234 ; MA # ( 鈴 → 鈴 ) CJK COMPATIBILITY IDEOGRAPH-F9B1 → CJK UNIFIED IDEOGRAPH-9234 # 2F9E7 ; 9238 ; MA # ( 鈸 → 鈸 ) CJK COMPATIBILITY IDEOGRAPH-2F9E7 → CJK UNIFIED IDEOGRAPH-9238 # @@ -9310,17 +9612,14 @@ F99B ; 934A ; MA # ( 鍊 → 鍊 ) CJK COMPATIBILITY IDEOGRAPH-F99B → CJK UNIF 2F9ED ; 28BFA ; MA # ( 𨯺 → 𨯺 ) CJK COMPATIBILITY IDEOGRAPH-2F9ED → CJK UNIFIED IDEOGRAPH-28BFA # -2ED0 ; 9485 ; MA #* ( ⻐ → 钅 ) CJK RADICAL C-SIMPLIFIED GOLD → CJK UNIFIED IDEOGRAPH-9485 # - -2ED1 ; 9577 ; MA #* ( ⻑ → 長 ) CJK RADICAL LONG ONE → CJK UNIFIED IDEOGRAPH-9577 # -2FA7 ; 9577 ; MA #* ( ⾧ → 長 ) KANGXI RADICAL LONG → CJK UNIFIED IDEOGRAPH-9577 # - 2ED2 ; 9578 ; MA #* ( ⻒ → 镸 ) CJK RADICAL LONG TWO → CJK UNIFIED IDEOGRAPH-9578 # 2ED3 ; 957F ; MA #* ( ⻓ → 长 ) CJK RADICAL C-SIMPLIFIED LONG → CJK UNIFIED IDEOGRAPH-957F # 2FA8 ; 9580 ; MA #* ( ⾨ → 門 ) KANGXI RADICAL GATE → CJK UNIFIED IDEOGRAPH-9580 # +2ED4 ; 95E8 ; MA #* ( ⻔ → 门 ) CJK RADICAL C-SIMPLIFIED GATE → CJK UNIFIED IDEOGRAPH-95E8 # + 2F9EE ; 958B ; MA # ( 開 → 開 ) CJK COMPATIBILITY IDEOGRAPH-2F9EE → CJK UNIFIED IDEOGRAPH-958B # 2F9EF ; 4995 ; MA # ( 䦕 → 䦕 ) CJK COMPATIBILITY IDEOGRAPH-2F9EF → CJK UNIFIED IDEOGRAPH-4995 # @@ -9331,8 +9630,6 @@ F986 ; 95AD ; MA # ( 閭 → 閭 ) CJK COMPATIBILITY IDEOGRAPH-F986 → CJK UNIF 2F9F1 ; 28D77 ; MA # ( 𨵷 → 𨵷 ) CJK COMPATIBILITY IDEOGRAPH-2F9F1 → CJK UNIFIED IDEOGRAPH-28D77 # -2ED4 ; 95E8 ; MA #* ( ⻔ → 门 ) CJK RADICAL C-SIMPLIFIED GATE → CJK UNIFIED IDEOGRAPH-95E8 # - 2FA9 ; 961C ; MA #* ( ⾩ → 阜 ) KANGXI RADICAL MOUND → CJK UNIFIED IDEOGRAPH-961C # 2ECF ; 961D ; MA #* ( ⻏ → 阝 ) CJK RADICAL CITY → CJK UNIFIED IDEOGRAPH-961D # @@ -9408,12 +9705,12 @@ FAC8 ; 9756 ; MA # ( 靖 → 靖 ) CJK COMPATIBILITY IDEOGRAPH-FAC8 → CJK UNIF 2FB1 ; 97CB ; MA #* ( ⾱ → 韋 ) KANGXI RADICAL TANNED LEATHER → CJK UNIFIED IDEOGRAPH-97CB # +2ED9 ; 97E6 ; MA #* ( ⻙ → 韦 ) CJK RADICAL C-SIMPLIFIED TANNED LEATHER → CJK UNIFIED IDEOGRAPH-97E6 # + FAC9 ; 97DB ; MA # ( 韛 → 韛 ) CJK COMPATIBILITY IDEOGRAPH-FAC9 → CJK UNIFIED IDEOGRAPH-97DB # 2F9FA ; 97E0 ; MA # ( 韠 → 韠 ) CJK COMPATIBILITY IDEOGRAPH-2F9FA → CJK UNIFIED IDEOGRAPH-97E0 # -2ED9 ; 97E6 ; MA #* ( ⻙ → 韦 ) CJK RADICAL C-SIMPLIFIED TANNED LEATHER → CJK UNIFIED IDEOGRAPH-97E6 # - 2FB2 ; 97ED ; MA #* ( ⾲ → 韭 ) KANGXI RADICAL LEEK → CJK UNIFIED IDEOGRAPH-97ED # 2F9FB ; 2940A ; MA # ( 𩐊 → 𩐊 ) CJK COMPATIBILITY IDEOGRAPH-2F9FB → CJK UNIFIED IDEOGRAPH-2940A # @@ -9425,6 +9722,8 @@ FACA ; 97FF ; MA # ( 響 → 響 ) CJK COMPATIBILITY IDEOGRAPH-FACA → CJK UNIF 2FB4 ; 9801 ; MA #* ( ⾴ → 頁 ) KANGXI RADICAL LEAF → CJK UNIFIED IDEOGRAPH-9801 # +2EDA ; 9875 ; MA #* ( ⻚ → 页 ) CJK RADICAL C-SIMPLIFIED LEAF → CJK UNIFIED IDEOGRAPH-9875 # + 2F9FC ; 4AB2 ; MA # ( 䪲 → 䪲 ) CJK COMPATIBILITY IDEOGRAPH-2F9FC → CJK UNIFIED IDEOGRAPH-4AB2 # FACB ; 980B ; MA # ( 頋 → 頋 ) CJK COMPATIBILITY IDEOGRAPH-FACB → CJK UNIFIED IDEOGRAPH-980B # @@ -9442,14 +9741,12 @@ FACC ; 983B ; MA # ( 頻 → 頻 ) CJK COMPATIBILITY IDEOGRAPH-FACC → CJK UNIF F9D0 ; 985E ; MA # ( 類 → 類 ) CJK COMPATIBILITY IDEOGRAPH-F9D0 → CJK UNIFIED IDEOGRAPH-985E # -2EDA ; 9875 ; MA #* ( ⻚ → 页 ) CJK RADICAL C-SIMPLIFIED LEAF → CJK UNIFIED IDEOGRAPH-9875 # - 2FB5 ; 98A8 ; MA #* ( ⾵ → 風 ) KANGXI RADICAL WIND → CJK UNIFIED IDEOGRAPH-98A8 # -2FA01 ; 295B6 ; MA # ( 𩖶 → 𩖶 ) CJK COMPATIBILITY IDEOGRAPH-2FA01 → CJK UNIFIED IDEOGRAPH-295B6 # - 2EDB ; 98CE ; MA #* ( ⻛ → 风 ) CJK RADICAL C-SIMPLIFIED WIND → CJK UNIFIED IDEOGRAPH-98CE # +2FA01 ; 295B6 ; MA # ( 𩖶 → 𩖶 ) CJK COMPATIBILITY IDEOGRAPH-2FA01 → CJK UNIFIED IDEOGRAPH-295B6 # + 2FB6 ; 98DB ; MA #* ( ⾶ → 飛 ) KANGXI RADICAL FLY → CJK UNIFIED IDEOGRAPH-98DB # 2EDC ; 98DE ; MA #* ( ⻜ → 飞 ) CJK RADICAL C-SIMPLIFIED FLY → CJK UNIFIED IDEOGRAPH-98DE # @@ -9459,6 +9756,8 @@ F9D0 ; 985E ; MA # ( 類 → 類 ) CJK COMPATIBILITY IDEOGRAPH-F9D0 → CJK UNIF 2EDF ; 98E0 ; MA #* ( ⻟ → 飠 ) CJK RADICAL EAT THREE → CJK UNIFIED IDEOGRAPH-98E0 # +2EE0 ; 9963 ; MA #* ( ⻠ → 饣 ) CJK RADICAL C-SIMPLIFIED EAT → CJK UNIFIED IDEOGRAPH-9963 # + 2FA02 ; 98E2 ; MA # ( 飢 → 飢 ) CJK COMPATIBILITY IDEOGRAPH-2FA02 → CJK UNIFIED IDEOGRAPH-98E2 # FA2A ; 98EF ; MA # ( 飯 → 飯 ) CJK COMPATIBILITY IDEOGRAPH-FA2A → CJK UNIFIED IDEOGRAPH-98EF # @@ -9471,8 +9770,6 @@ FA2C ; 9928 ; MA # ( 館 → 館 ) CJK COMPATIBILITY IDEOGRAPH-FA2C → CJK UNIF 2FA04 ; 9929 ; MA # ( 餩 → 餩 ) CJK COMPATIBILITY IDEOGRAPH-2FA04 → CJK UNIFIED IDEOGRAPH-9929 # -2EE0 ; 9963 ; MA #* ( ⻠ → 饣 ) CJK RADICAL C-SIMPLIFIED EAT → CJK UNIFIED IDEOGRAPH-9963 # - 2FB8 ; 9996 ; MA #* ( ⾸ → 首 ) KANGXI RADICAL HEAD → CJK UNIFIED IDEOGRAPH-9996 # 2FB9 ; 9999 ; MA #* ( ⾹ → 香 ) KANGXI RADICAL FRAGRANT → CJK UNIFIED IDEOGRAPH-9999 # @@ -9481,6 +9778,8 @@ FA2C ; 9928 ; MA # ( 館 → 館 ) CJK COMPATIBILITY IDEOGRAPH-FA2C → CJK UNIF 2FBA ; 99AC ; MA #* ( ⾺ → 馬 ) KANGXI RADICAL HORSE → CJK UNIFIED IDEOGRAPH-99AC # +2EE2 ; 9A6C ; MA #* ( ⻢ → 马 ) CJK RADICAL C-SIMPLIFIED HORSE → CJK UNIFIED IDEOGRAPH-9A6C # + 2FA06 ; 99C2 ; MA # ( 駂 → 駂 ) CJK COMPATIBILITY IDEOGRAPH-2FA06 → CJK UNIFIED IDEOGRAPH-99C2 # F91A ; 99F1 ; MA # ( 駱 → 駱 ) CJK COMPATIBILITY IDEOGRAPH-F91A → CJK UNIFIED IDEOGRAPH-99F1 # @@ -9489,8 +9788,6 @@ F91A ; 99F1 ; MA # ( 駱 → 駱 ) CJK COMPATIBILITY IDEOGRAPH-F91A → CJK UNIF F987 ; 9A6A ; MA # ( 驪 → 驪 ) CJK COMPATIBILITY IDEOGRAPH-F987 → CJK UNIFIED IDEOGRAPH-9A6A # -2EE2 ; 9A6C ; MA #* ( ⻢ → 马 ) CJK RADICAL C-SIMPLIFIED HORSE → CJK UNIFIED IDEOGRAPH-9A6C # - 2FBB ; 9AA8 ; MA #* ( ⾻ → 骨 ) KANGXI RADICAL BONE → CJK UNIFIED IDEOGRAPH-9AA8 # 2FA08 ; 4BCE ; MA # ( 䯎 → 䯎 ) CJK COMPATIBILITY IDEOGRAPH-2FA08 → CJK UNIFIED IDEOGRAPH-4BCE # @@ -9515,20 +9812,22 @@ FACD ; 9B12 ; MA # ( 鬒 → 鬒 ) CJK COMPATIBILITY IDEOGRAPH-FACD → CJK UNIF 2FC2 ; 9B5A ; MA #* ( ⿂ → 魚 ) KANGXI RADICAL FISH → CJK UNIFIED IDEOGRAPH-9B5A # +2EE5 ; 9C7C ; MA #* ( ⻥ → 鱼 ) CJK RADICAL C-SIMPLIFIED FISH → CJK UNIFIED IDEOGRAPH-9C7C # + F939 ; 9B6F ; MA # ( 魯 → 魯 ) CJK COMPATIBILITY IDEOGRAPH-F939 → CJK UNIFIED IDEOGRAPH-9B6F # 2FA0B ; 9C40 ; MA # ( 鱀 → 鱀 ) CJK COMPATIBILITY IDEOGRAPH-2FA0B → CJK UNIFIED IDEOGRAPH-9C40 # F9F2 ; 9C57 ; MA # ( 鱗 → 鱗 ) CJK COMPATIBILITY IDEOGRAPH-F9F2 → CJK UNIFIED IDEOGRAPH-9C57 # -2EE5 ; 9C7C ; MA #* ( ⻥ → 鱼 ) CJK RADICAL C-SIMPLIFIED FISH → CJK UNIFIED IDEOGRAPH-9C7C # - 2FC3 ; 9CE5 ; MA #* ( ⿃ → 鳥 ) KANGXI RADICAL BIRD → CJK UNIFIED IDEOGRAPH-9CE5 # 2FA0C ; 9CFD ; MA # ( 鳽 → 鳽 ) CJK COMPATIBILITY IDEOGRAPH-2FA0C → CJK UNIFIED IDEOGRAPH-9CFD # 2FA0D ; 4CCE ; MA # ( 䳎 → 䳎 ) CJK COMPATIBILITY IDEOGRAPH-2FA0D → CJK UNIFIED IDEOGRAPH-4CCE # +9E43 ; 9E42 ; MA # ( 鹃 → 鹂 ) CJK UNIFIED IDEOGRAPH-9E43 → CJK UNIFIED IDEOGRAPH-9E42 # + 2FA0F ; 9D67 ; MA # ( 鵧 → 鵧 ) CJK COMPATIBILITY IDEOGRAPH-2FA0F → CJK UNIFIED IDEOGRAPH-9D67 # 2FA0E ; 4CED ; MA # ( 䳭 → 䳭 ) CJK COMPATIBILITY IDEOGRAPH-2FA0E → CJK UNIFIED IDEOGRAPH-4CED # @@ -9547,8 +9846,6 @@ F93A ; 9DFA ; MA # ( 鷺 → 鷺 ) CJK COMPATIBILITY IDEOGRAPH-F93A → CJK UNIF F920 ; 9E1E ; MA # ( 鸞 → 鸞 ) CJK COMPATIBILITY IDEOGRAPH-F920 → CJK UNIFIED IDEOGRAPH-9E1E # -9E43 ; 9E42 ; MA # ( 鹃 → 鹂 ) CJK UNIFIED IDEOGRAPH-9E43 → CJK UNIFIED IDEOGRAPH-9E42 # - 2FC4 ; 9E75 ; MA #* ( ⿄ → 鹵 ) KANGXI RADICAL SALT → CJK UNIFIED IDEOGRAPH-9E75 # F940 ; 9E7F ; MA # ( 鹿 → 鹿 ) CJK COMPATIBILITY IDEOGRAPH-F940 → CJK UNIFIED IDEOGRAPH-9E7F # @@ -9589,10 +9886,10 @@ FA3A ; 58A8 ; MA # ( 墨 → 墨 ) CJK COMPATIBILITY IDEOGRAPH-FA3A → CJK UNIF 2FCC ; 9EFD ; MA #* ( ⿌ → 黽 ) KANGXI RADICAL FROG → CJK UNIFIED IDEOGRAPH-9EFD # -2FA19 ; 9F05 ; MA # ( 鼅 → 鼅 ) CJK COMPATIBILITY IDEOGRAPH-2FA19 → CJK UNIFIED IDEOGRAPH-9F05 # - 2FA18 ; 9EFE ; MA # ( 黾 → 黾 ) CJK COMPATIBILITY IDEOGRAPH-2FA18 → CJK UNIFIED IDEOGRAPH-9EFE # +2FA19 ; 9F05 ; MA # ( 鼅 → 鼅 ) CJK COMPATIBILITY IDEOGRAPH-2FA19 → CJK UNIFIED IDEOGRAPH-9F05 # + 2FCD ; 9F0E ; MA #* ( ⿍ → 鼎 ) KANGXI RADICAL TRIPOD → CJK UNIFIED IDEOGRAPH-9F0E # 2FA1A ; 9F0F ; MA # ( 鼏 → 鼏 ) CJK COMPATIBILITY IDEOGRAPH-2FA1A → CJK UNIFIED IDEOGRAPH-9F0F # @@ -9614,17 +9911,17 @@ FAD8 ; 9F43 ; MA # ( 齃 → 齃 ) CJK COMPATIBILITY IDEOGRAPH-FAD8 → CJK UNIF 2FD2 ; 9F52 ; MA #* ( ⿒ → 齒 ) KANGXI RADICAL TOOTH → CJK UNIFIED IDEOGRAPH-9F52 # -2FA1D ; 2A600 ; MA # ( 𪘀 → 𪘀 ) CJK COMPATIBILITY IDEOGRAPH-2FA1D → CJK UNIFIED IDEOGRAPH-2A600 # - 2EEE ; 9F7F ; MA #* ( ⻮ → 齿 ) CJK RADICAL C-SIMPLIFIED TOOTH → CJK UNIFIED IDEOGRAPH-9F7F # +2FA1D ; 2A600 ; MA # ( 𪘀 → 𪘀 ) CJK COMPATIBILITY IDEOGRAPH-2FA1D → CJK UNIFIED IDEOGRAPH-2A600 # + F9C4 ; 9F8D ; MA # ( 龍 → 龍 ) CJK COMPATIBILITY IDEOGRAPH-F9C4 → CJK UNIFIED IDEOGRAPH-9F8D # 2FD3 ; 9F8D ; MA #* ( ⿓ → 龍 ) KANGXI RADICAL DRAGON → CJK UNIFIED IDEOGRAPH-9F8D # -FAD9 ; 9F8E ; MA # ( 龎 → 龎 ) CJK COMPATIBILITY IDEOGRAPH-FAD9 → CJK UNIFIED IDEOGRAPH-9F8E # - 2EF0 ; 9F99 ; MA #* ( ⻰ → 龙 ) CJK RADICAL C-SIMPLIFIED DRAGON → CJK UNIFIED IDEOGRAPH-9F99 # +FAD9 ; 9F8E ; MA # ( 龎 → 龎 ) CJK COMPATIBILITY IDEOGRAPH-FAD9 → CJK UNIFIED IDEOGRAPH-9F8E # + F907 ; 9F9C ; MA # ( 龜 → 龜 ) CJK COMPATIBILITY IDEOGRAPH-F907 → CJK UNIFIED IDEOGRAPH-9F9C # F908 ; 9F9C ; MA # ( 龜 → 龜 ) CJK COMPATIBILITY IDEOGRAPH-F908 → CJK UNIFIED IDEOGRAPH-9F9C # FACE ; 9F9C ; MA # ( 龜 → 龜 ) CJK COMPATIBILITY IDEOGRAPH-FACE → CJK UNIFIED IDEOGRAPH-9F9C # @@ -9634,4 +9931,63 @@ FACE ; 9F9C ; MA # ( 龜 → 龜 ) CJK COMPATIBILITY IDEOGRAPH-FACE → CJK UNIF 2FD5 ; 9FA0 ; MA #* ( ⿕ → 龠 ) KANGXI RADICAL FLUTE → CJK UNIFIED IDEOGRAPH-9FA0 # -# total: 6311 +0CDC ; 0C5C ; MA # ( ೜ → ౜ ) KANNADA ARCHAIC SHRII → TELUGU ARCHAIC SHRII # + +1DE8 ; 1ADA ; MA # ( ᷨ → ᫚ ) COMBINING LATIN SMALL LETTER B → COMBINING FLAT SIGN # + +2DEE ; 1ADB ; MA # ( ⷮ → ᫛ ) COMBINING CYRILLIC LETTER TE → COMBINING DOWN TACK ABOVE # + +1AE7 ; 1AE5 ; MA # ( ᫧ → ᫥ ) COMBINING DOUBLE ARCH ABOVE → COMBINING SEAGULL ABOVE # + +031A ; 1AE9 ; MA # ( ̚ → ᫩ ) COMBINING LEFT ANGLE ABOVE → COMBINING LEFT ANGLE CENTRED ABOVE # + +0295 ; A7CE ; MA # ( ʕ → ꟎ ) LATIN LETTER PHARYNGEAL VOICED FRICATIVE → LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE # +A7CF ; A7CE ; MA # ( ꟏ → ꟎ ) LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE → LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE # →ʕ→ + +0348 ; 10EFA ; MA # ( ͈ → 𐻺 ) COMBINING DOUBLE VERTICAL LINE BELOW → ARABIC DOUBLE VERTICAL BAR BELOW # + +0956 ; 11B62 ; MA # ( ॖ → 𑭢 ) DEVANAGARI VOWEL SIGN UE → SHARADA VOWEL SIGN UE # +0A41 ; 11B62 ; MA # ( ੁ → 𑭢 ) GURMUKHI VOWEL SIGN U → SHARADA VOWEL SIGN UE # →ॖ→ + +0957 ; 11B63 ; MA # ( ॗ → 𑭣 ) DEVANAGARI VOWEL SIGN UUE → SHARADA VOWEL SIGN UUE # +0A42 ; 11B63 ; MA # ( ੂ → 𑭣 ) GURMUKHI VOWEL SIGN UU → SHARADA VOWEL SIGN UUE # →ॗ→ + +0947 ; 11B64 ; MA # ( े → 𑭤 ) DEVANAGARI VOWEL SIGN E → SHARADA VOWEL SIGN SHORT E # +0A47 ; 11B64 ; MA # ( ੇ → 𑭤 ) GURMUKHI VOWEL SIGN EE → SHARADA VOWEL SIGN SHORT E # →े→ + +5152 ; 16FF3 ; MA # ( 兒 → 𖿳 ) CJK UNIFIED IDEOGRAPH-5152 → CHINESE SMALL TRADITIONAL ER # + +1F40D ; 1CCFA ; MA #* ( 🐍 → 𜳺 ) SNAKE → SNAKE SYMBOL # + +1F443 ; 1CCFC ; MA #* ( 👃 → 𜳼 ) NOSE → NOSE SYMBOL # + +1F377 ; 1CEBA ; MA #* ( 🍷 → 𜺺 ) WINE GLASS → FRAGILE SYMBOL # + +1F3E2 ; 1CEBB ; MA #* ( 🏢 → 𜺻 ) OFFICE BUILDING → OFFICE BUILDING SYMBOL # + +1F333 ; 1CEBC ; MA #* ( 🌳 → 𜺼 ) DECIDUOUS TREE → TREE SYMBOL # + +1F34E ; 1CEBD ; MA #* ( 🍎 → 𜺽 ) RED APPLE → APPLE SYMBOL # +1F34F ; 1CEBD ; MA #* ( 🍏 → 𜺽 ) GREEN APPLE → APPLE SYMBOL # + +1F352 ; 1CEBE ; MA #* ( 🍒 → 𜺾 ) CHERRIES → CHERRY SYMBOL # + +1F353 ; 1CEBF ; MA #* ( 🍓 → 𜺿 ) STRAWBERRY → STRAWBERRY SYMBOL # + +28FF ; 1CEE0 ; MA #* ( ⣿ → 𜻠 ) BRAILLE PATTERN DOTS-12345678 → GEOMANTIC FIGURE POPULUS # + +29B5 ; 1CEF0 ; MA #* ( ⦵ → 𜻰 ) CIRCLE WITH HORIZONTAL BAR → MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR # + +21C4 ; 1F8D0 ; MA #* ( ⇄ → 🣐 ) RIGHTWARDS ARROW OVER LEFTWARDS ARROW → LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW # + +21CC ; 1F8D1 ; MA #* ( ⇌ → 🣑 ) RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON → LONG RIGHTWARDS HARPOON OVER LONG LEFTWARDS HARPOON # + +2657 ; 1FA55 ; MA #* ( ♗ → 🩕 ) WHITE CHESS BISHOP → WHITE CHESS ALFIL # + +265D ; 1FA57 ; MA #* ( ♝ → 🩗 ) BLACK CHESS BISHOP → BLACK CHESS ALFIL # + +1F514 ; 1FBFA ; MA #* ( 🔔 → 🯺 ) BELL → ALARM BELL SYMBOL # + +6138 ; 2B73F ; MA # ( 愸 → 𫜿 ) CJK UNIFIED IDEOGRAPH-6138 → CJK UNIFIED IDEOGRAPH-2B73F # + +# total: 6565 diff --git a/admin/unidata/emoji-data.txt b/admin/unidata/emoji-data.txt index d2e67772630..09a9b5aa8a4 100644 --- a/admin/unidata/emoji-data.txt +++ b/admin/unidata/emoji-data.txt @@ -1,11 +1,11 @@ # emoji-data.txt -# Date: 2024-05-01, 21:25:24 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-07-25, 17:54:31 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Data for UTS #51 -# Used with Emoji Version 16.0 and subsequent minor revisions (if any) +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -340,6 +340,7 @@ 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 +1F6D8 ; Emoji # E17.0 [1] (🛘) landslide 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 @@ -408,6 +409,8 @@ 1FA83..1FA86 ; Emoji # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Emoji # E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Emoji # E16.0 [1] (🪉) harp +1FA8A ; Emoji # E17.0 [1] (🪊) trombone +1FA8E ; Emoji # E17.0 [1] (🪎) treasure chest 1FA8F ; Emoji # E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Emoji # E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Emoji # E13.0 [19] (🪖..🪨) military helmet..rock @@ -421,6 +424,8 @@ 1FAC0..1FAC2 ; Emoji # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Emoji # E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Emoji # E16.0 [1] (🫆) fingerprint +1FAC8 ; Emoji # E17.0 [1] (🫈) hairy creature +1FACD ; Emoji # E17.0 [1] (🫍) orca 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 @@ -430,10 +435,12 @@ 1FAE0..1FAE7 ; Emoji # E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Emoji # E15.0 [1] (🫨) shaking face 1FAE9 ; Emoji # E16.0 [1] (🫩) face with bags under eyes +1FAEA ; Emoji # E17.0 [1] (🫪) distorted face +1FAEF ; Emoji # E17.0 [1] (🫯) fight cloud 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: 1431 +# Total elements: 1438 # ================================================ @@ -640,6 +647,7 @@ 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 +1F6D8 ; Emoji_Presentation # E17.0 [1] (🛘) landslide 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 @@ -704,6 +712,8 @@ 1FA83..1FA86 ; Emoji_Presentation # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Emoji_Presentation # E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Emoji_Presentation # E16.0 [1] (🪉) harp +1FA8A ; Emoji_Presentation # E17.0 [1] (🪊) trombone +1FA8E ; Emoji_Presentation # E17.0 [1] (🪎) treasure chest 1FA8F ; Emoji_Presentation # E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Emoji_Presentation # E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Emoji_Presentation # E13.0 [19] (🪖..🪨) military helmet..rock @@ -717,6 +727,8 @@ 1FAC0..1FAC2 ; Emoji_Presentation # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Emoji_Presentation # E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Emoji_Presentation # E16.0 [1] (🫆) fingerprint +1FAC8 ; Emoji_Presentation # E17.0 [1] (🫈) hairy creature +1FACD ; Emoji_Presentation # E17.0 [1] (🫍) orca 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 @@ -726,10 +738,12 @@ 1FAE0..1FAE7 ; Emoji_Presentation # E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Emoji_Presentation # E15.0 [1] (🫨) shaking face 1FAE9 ; Emoji_Presentation # E16.0 [1] (🫩) face with bags under eyes +1FAEA ; Emoji_Presentation # E17.0 [1] (🫪) distorted face +1FAEF ; Emoji_Presentation # E17.0 [1] (🫯) fight cloud 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: 1212 +# Total elements: 1219 # ================================================ @@ -827,7 +841,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 21A9..21AA ; Extended_Pictographic# E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right 231A..231B ; Extended_Pictographic# E0.6 [2] (⌚..⌛) watch..hourglass done 2328 ; Extended_Pictographic# E1.0 [1] (⌨️) keyboard -2388 ; Extended_Pictographic# E0.0 [1] (⎈) HELM SYMBOL 23CF ; Extended_Pictographic# E1.0 [1] (⏏️) eject button 23E9..23EC ; Extended_Pictographic# E0.6 [4] (⏩..⏬) fast-forward button..fast down button 23ED..23EE ; Extended_Pictographic# E0.7 [2] (⏭️..⏮️) next track button..last track button @@ -844,106 +857,63 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 2600..2601 ; Extended_Pictographic# E0.6 [2] (☀️..☁️) sun..cloud 2602..2603 ; Extended_Pictographic# E0.7 [2] (☂️..☃️) umbrella..snowman 2604 ; Extended_Pictographic# E1.0 [1] (☄️) comet -2605 ; Extended_Pictographic# E0.0 [1] (★) BLACK STAR -2607..260D ; Extended_Pictographic# E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION 260E ; Extended_Pictographic# E0.6 [1] (☎️) telephone -260F..2610 ; Extended_Pictographic# E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX 2611 ; Extended_Pictographic# E0.6 [1] (☑️) check box with check -2612 ; Extended_Pictographic# E0.0 [1] (☒) BALLOT BOX WITH X 2614..2615 ; Extended_Pictographic# E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage -2616..2617 ; Extended_Pictographic# E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE 2618 ; Extended_Pictographic# E1.0 [1] (☘️) shamrock -2619..261C ; Extended_Pictographic# E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX 261D ; Extended_Pictographic# E0.6 [1] (☝️) index pointing up -261E..261F ; Extended_Pictographic# E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX 2620 ; Extended_Pictographic# E1.0 [1] (☠️) skull and crossbones -2621 ; Extended_Pictographic# E0.0 [1] (☡) CAUTION SIGN 2622..2623 ; Extended_Pictographic# E1.0 [2] (☢️..☣️) radioactive..biohazard -2624..2625 ; Extended_Pictographic# E0.0 [2] (☤..☥) CADUCEUS..ANKH 2626 ; Extended_Pictographic# E1.0 [1] (☦️) orthodox cross -2627..2629 ; Extended_Pictographic# E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM 262A ; Extended_Pictographic# E0.7 [1] (☪️) star and crescent -262B..262D ; Extended_Pictographic# E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE 262E ; Extended_Pictographic# E1.0 [1] (☮️) peace symbol 262F ; Extended_Pictographic# E0.7 [1] (☯️) yin yang -2630..2637 ; Extended_Pictographic# E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH 2638..2639 ; Extended_Pictographic# E0.7 [2] (☸️..☹️) wheel of dharma..frowning face 263A ; Extended_Pictographic# E0.6 [1] (☺️) smiling face -263B..263F ; Extended_Pictographic# E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY 2640 ; Extended_Pictographic# E4.0 [1] (♀️) female sign -2641 ; Extended_Pictographic# E0.0 [1] (♁) EARTH 2642 ; Extended_Pictographic# E4.0 [1] (♂️) male sign -2643..2647 ; Extended_Pictographic# E0.0 [5] (♃..♇) JUPITER..PLUTO 2648..2653 ; Extended_Pictographic# E0.6 [12] (♈..♓) Aries..Pisces -2654..265E ; Extended_Pictographic# E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT 265F ; Extended_Pictographic# E11.0 [1] (♟️) chess pawn 2660 ; Extended_Pictographic# E0.6 [1] (♠️) spade suit -2661..2662 ; Extended_Pictographic# E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT 2663 ; Extended_Pictographic# E0.6 [1] (♣️) club suit -2664 ; Extended_Pictographic# E0.0 [1] (♤) WHITE SPADE SUIT 2665..2666 ; Extended_Pictographic# E0.6 [2] (♥️..♦️) heart suit..diamond suit -2667 ; Extended_Pictographic# E0.0 [1] (♧) WHITE CLUB SUIT 2668 ; Extended_Pictographic# E0.6 [1] (♨️) hot springs -2669..267A ; Extended_Pictographic# E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS 267B ; Extended_Pictographic# E0.6 [1] (♻️) recycling symbol -267C..267D ; Extended_Pictographic# E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL 267E ; Extended_Pictographic# E11.0 [1] (♾️) infinity 267F ; Extended_Pictographic# E0.6 [1] (♿) wheelchair symbol -2680..2685 ; Extended_Pictographic# E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 -2690..2691 ; Extended_Pictographic# E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG 2692 ; Extended_Pictographic# E1.0 [1] (⚒️) hammer and pick 2693 ; Extended_Pictographic# E0.6 [1] (⚓) anchor 2694 ; Extended_Pictographic# E1.0 [1] (⚔️) crossed swords 2695 ; Extended_Pictographic# E4.0 [1] (⚕️) medical symbol 2696..2697 ; Extended_Pictographic# E1.0 [2] (⚖️..⚗️) balance scale..alembic -2698 ; Extended_Pictographic# E0.0 [1] (⚘) FLOWER 2699 ; Extended_Pictographic# E1.0 [1] (⚙️) gear -269A ; Extended_Pictographic# E0.0 [1] (⚚) STAFF OF HERMES 269B..269C ; Extended_Pictographic# E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis -269D..269F ; Extended_Pictographic# E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT 26A0..26A1 ; Extended_Pictographic# E0.6 [2] (⚠️..⚡) warning..high voltage -26A2..26A6 ; Extended_Pictographic# E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN 26A7 ; Extended_Pictographic# E13.0 [1] (⚧️) transgender symbol -26A8..26A9 ; Extended_Pictographic# E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN 26AA..26AB ; Extended_Pictographic# E0.6 [2] (⚪..⚫) white circle..black circle -26AC..26AF ; Extended_Pictographic# E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL 26B0..26B1 ; Extended_Pictographic# E1.0 [2] (⚰️..⚱️) coffin..funeral urn -26B2..26BC ; Extended_Pictographic# E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE 26BD..26BE ; Extended_Pictographic# E0.6 [2] (⚽..⚾) soccer ball..baseball -26BF..26C3 ; Extended_Pictographic# E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING 26C4..26C5 ; Extended_Pictographic# E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud -26C6..26C7 ; Extended_Pictographic# E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN 26C8 ; Extended_Pictographic# E0.7 [1] (⛈️) cloud with lightning and rain -26C9..26CD ; Extended_Pictographic# E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR 26CE ; Extended_Pictographic# E0.6 [1] (⛎) Ophiuchus 26CF ; Extended_Pictographic# E0.7 [1] (⛏️) pick -26D0 ; Extended_Pictographic# E0.0 [1] (⛐) CAR SLIDING 26D1 ; Extended_Pictographic# E0.7 [1] (⛑️) rescue worker’s helmet -26D2 ; Extended_Pictographic# E0.0 [1] (⛒) CIRCLED CROSSING LANES 26D3 ; Extended_Pictographic# E0.7 [1] (⛓️) chains 26D4 ; Extended_Pictographic# E0.6 [1] (⛔) no entry -26D5..26E8 ; Extended_Pictographic# E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD 26E9 ; Extended_Pictographic# E0.7 [1] (⛩️) shinto shrine 26EA ; Extended_Pictographic# E0.6 [1] (⛪) church -26EB..26EF ; Extended_Pictographic# E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE 26F0..26F1 ; Extended_Pictographic# E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground 26F2..26F3 ; Extended_Pictographic# E0.6 [2] (⛲..⛳) fountain..flag in hole 26F4 ; Extended_Pictographic# E0.7 [1] (⛴️) ferry 26F5 ; Extended_Pictographic# E0.6 [1] (⛵) sailboat -26F6 ; Extended_Pictographic# E0.0 [1] (⛶) SQUARE FOUR CORNERS 26F7..26F9 ; Extended_Pictographic# E0.7 [3] (⛷️..⛹️) skier..person bouncing ball 26FA ; Extended_Pictographic# E0.6 [1] (⛺) tent -26FB..26FC ; Extended_Pictographic# E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL 26FD ; Extended_Pictographic# E0.6 [1] (⛽) fuel pump -26FE..2701 ; Extended_Pictographic# E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS 2702 ; Extended_Pictographic# E0.6 [1] (✂️) scissors -2703..2704 ; Extended_Pictographic# E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS 2705 ; Extended_Pictographic# E0.6 [1] (✅) check mark button 2708..270C ; Extended_Pictographic# E0.6 [5] (✈️..✌️) airplane..victory hand 270D ; Extended_Pictographic# E0.7 [1] (✍️) writing hand -270E ; Extended_Pictographic# E0.0 [1] (✎) LOWER RIGHT PENCIL 270F ; Extended_Pictographic# E0.6 [1] (✏️) pencil -2710..2711 ; Extended_Pictographic# E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB 2712 ; Extended_Pictographic# E0.6 [1] (✒️) black nib 2714 ; Extended_Pictographic# E0.6 [1] (✔️) check mark 2716 ; Extended_Pictographic# E0.6 [1] (✖️) multiply @@ -959,7 +929,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 2757 ; Extended_Pictographic# E0.6 [1] (❗) red exclamation mark 2763 ; Extended_Pictographic# E1.0 [1] (❣️) heart exclamation 2764 ; Extended_Pictographic# E0.6 [1] (❤️) red heart -2765..2767 ; Extended_Pictographic# E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET 2795..2797 ; Extended_Pictographic# E0.6 [3] (➕..➗) plus..divide 27A1 ; Extended_Pictographic# E0.6 [1] (➡️) right arrow 27B0 ; Extended_Pictographic# E0.6 [1] (➰) curly loop @@ -973,19 +942,19 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 303D ; Extended_Pictographic# E0.6 [1] (〽️) part alternation mark 3297 ; Extended_Pictographic# E0.6 [1] (㊗️) Japanese “congratulations” button 3299 ; Extended_Pictographic# E0.6 [1] (㊙️) Japanese “secret” button -1F000..1F003 ; Extended_Pictographic# E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND 1F004 ; Extended_Pictographic# E0.6 [1] (🀄) mahjong red dragon -1F005..1F0CE ; Extended_Pictographic# E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS +1F02C..1F02F ; Extended_Pictographic# E0.0 [4] (🀬..🀯) .. +1F094..1F09F ; Extended_Pictographic# E0.0 [12] (🂔..🂟) .. +1F0AF..1F0B0 ; Extended_Pictographic# E0.0 [2] (🂯..🂰) .. +1F0C0 ; Extended_Pictographic# E0.0 [1] (🃀) 1F0CF ; Extended_Pictographic# E0.6 [1] (🃏) joker -1F0D0..1F0FF ; Extended_Pictographic# E0.0 [48] (🃐..🃿) .. -1F10D..1F10F ; Extended_Pictographic# E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH -1F12F ; Extended_Pictographic# E0.0 [1] (🄯) COPYLEFT SYMBOL -1F16C..1F16F ; Extended_Pictographic# E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE +1F0D0 ; Extended_Pictographic# E0.0 [1] (🃐) +1F0F6..1F0FF ; Extended_Pictographic# E0.0 [10] (🃶..🃿) .. 1F170..1F171 ; Extended_Pictographic# E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) 1F17E..1F17F ; Extended_Pictographic# E0.6 [2] (🅾️..🅿️) O button (blood type)..P button 1F18E ; Extended_Pictographic# E0.6 [1] (🆎) AB button (blood type) 1F191..1F19A ; Extended_Pictographic# E0.6 [10] (🆑..🆚) CL button..VS button -1F1AD..1F1E5 ; Extended_Pictographic# E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. +1F1AE..1F1E5 ; Extended_Pictographic# E0.0 [56] (🆮..🇥) .. 1F201..1F202 ; Extended_Pictographic# E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button 1F203..1F20F ; Extended_Pictographic# E0.0 [13] (🈃..🈏) .. 1F21A ; Extended_Pictographic# E0.6 [1] (🈚) Japanese “free of charge” button @@ -994,7 +963,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F23C..1F23F ; Extended_Pictographic# E0.0 [4] (🈼..🈿) .. 1F249..1F24F ; Extended_Pictographic# E0.0 [7] (🉉..🉏) .. 1F250..1F251 ; Extended_Pictographic# E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button -1F252..1F2FF ; Extended_Pictographic# E0.0 [174] (🉒..🋿) .. +1F252..1F25F ; Extended_Pictographic# E0.0 [14] (🉒..🉟) .. +1F266..1F2FF ; Extended_Pictographic# E0.0 [154] (🉦..🋿) .. 1F300..1F30C ; Extended_Pictographic# E0.6 [13] (🌀..🌌) cyclone..milky way 1F30D..1F30E ; Extended_Pictographic# E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas 1F30F ; Extended_Pictographic# E0.6 [1] (🌏) globe showing Asia-Australia @@ -1010,7 +980,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F31D..1F31E ; Extended_Pictographic# E1.0 [2] (🌝..🌞) full moon face..sun with face 1F31F..1F320 ; Extended_Pictographic# E0.6 [2] (🌟..🌠) glowing star..shooting star 1F321 ; Extended_Pictographic# E0.7 [1] (🌡️) thermometer -1F322..1F323 ; Extended_Pictographic# E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN 1F324..1F32C ; Extended_Pictographic# E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face 1F32D..1F32F ; Extended_Pictographic# E1.0 [3] (🌭..🌯) hot dog..burrito 1F330..1F331 ; Extended_Pictographic# E0.6 [2] (🌰..🌱) chestnut..seedling @@ -1026,11 +995,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F37D ; Extended_Pictographic# E0.7 [1] (🍽️) fork and knife with plate 1F37E..1F37F ; Extended_Pictographic# E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn 1F380..1F393 ; Extended_Pictographic# E0.6 [20] (🎀..🎓) ribbon..graduation cap -1F394..1F395 ; Extended_Pictographic# E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS 1F396..1F397 ; Extended_Pictographic# E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon -1F398 ; Extended_Pictographic# E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS 1F399..1F39B ; Extended_Pictographic# E0.7 [3] (🎙️..🎛️) studio microphone..control knobs -1F39C..1F39D ; Extended_Pictographic# E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES 1F39E..1F39F ; Extended_Pictographic# E0.7 [2] (🎞️..🎟️) film frames..admission tickets 1F3A0..1F3C4 ; Extended_Pictographic# E0.6 [37] (🎠..🏄) carousel horse..person surfing 1F3C5 ; Extended_Pictographic# E1.0 [1] (🏅) sports medal @@ -1045,11 +1011,9 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F3E0..1F3E3 ; Extended_Pictographic# E0.6 [4] (🏠..🏣) house..Japanese post office 1F3E4 ; Extended_Pictographic# E1.0 [1] (🏤) post office 1F3E5..1F3F0 ; Extended_Pictographic# E0.6 [12] (🏥..🏰) hospital..castle -1F3F1..1F3F2 ; Extended_Pictographic# E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT 1F3F3 ; Extended_Pictographic# E0.7 [1] (🏳️) white flag 1F3F4 ; Extended_Pictographic# E1.0 [1] (🏴) black flag 1F3F5 ; Extended_Pictographic# E0.7 [1] (🏵️) rosette -1F3F6 ; Extended_Pictographic# E0.0 [1] (🏶) BLACK ROSETTE 1F3F7 ; Extended_Pictographic# E0.7 [1] (🏷️) label 1F3F8..1F3FA ; Extended_Pictographic# E1.0 [3] (🏸..🏺) badminton..amphora 1F400..1F407 ; Extended_Pictographic# E1.0 [8] (🐀..🐇) rat..rabbit @@ -1086,7 +1050,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F4F8 ; Extended_Pictographic# E1.0 [1] (📸) camera with flash 1F4F9..1F4FC ; Extended_Pictographic# E0.6 [4] (📹..📼) video camera..videocassette 1F4FD ; Extended_Pictographic# E0.7 [1] (📽️) film projector -1F4FE ; Extended_Pictographic# E0.0 [1] (📾) PORTABLE STEREO 1F4FF..1F502 ; Extended_Pictographic# E1.0 [4] (📿..🔂) prayer beads..repeat single button 1F503 ; Extended_Pictographic# E0.6 [1] (🔃) clockwise vertical arrows 1F504..1F507 ; Extended_Pictographic# E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker @@ -1097,51 +1060,30 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F516..1F52B ; Extended_Pictographic# E0.6 [22] (🔖..🔫) bookmark..water pistol 1F52C..1F52D ; Extended_Pictographic# E1.0 [2] (🔬..🔭) microscope..telescope 1F52E..1F53D ; Extended_Pictographic# E0.6 [16] (🔮..🔽) crystal ball..downwards button -1F546..1F548 ; Extended_Pictographic# E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS 1F549..1F54A ; Extended_Pictographic# E0.7 [2] (🕉️..🕊️) om..dove 1F54B..1F54E ; Extended_Pictographic# E1.0 [4] (🕋..🕎) kaaba..menorah -1F54F ; Extended_Pictographic# E0.0 [1] (🕏) BOWL OF HYGIEIA 1F550..1F55B ; Extended_Pictographic# E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock 1F55C..1F567 ; Extended_Pictographic# E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty -1F568..1F56E ; Extended_Pictographic# E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK 1F56F..1F570 ; Extended_Pictographic# E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock -1F571..1F572 ; Extended_Pictographic# E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY 1F573..1F579 ; Extended_Pictographic# E0.7 [7] (🕳️..🕹️) hole..joystick 1F57A ; Extended_Pictographic# E3.0 [1] (🕺) man dancing -1F57B..1F586 ; Extended_Pictographic# E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE 1F587 ; Extended_Pictographic# E0.7 [1] (🖇️) linked paperclips -1F588..1F589 ; Extended_Pictographic# E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL 1F58A..1F58D ; Extended_Pictographic# E0.7 [4] (🖊️..🖍️) pen..crayon -1F58E..1F58F ; Extended_Pictographic# E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN 1F590 ; Extended_Pictographic# E0.7 [1] (🖐️) hand with fingers splayed -1F591..1F594 ; Extended_Pictographic# E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND 1F595..1F596 ; Extended_Pictographic# E1.0 [2] (🖕..🖖) middle finger..vulcan salute -1F597..1F5A3 ; Extended_Pictographic# E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX 1F5A4 ; Extended_Pictographic# E3.0 [1] (🖤) black heart 1F5A5 ; Extended_Pictographic# E0.7 [1] (🖥️) desktop computer -1F5A6..1F5A7 ; Extended_Pictographic# E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS 1F5A8 ; Extended_Pictographic# E0.7 [1] (🖨️) printer -1F5A9..1F5B0 ; Extended_Pictographic# E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE 1F5B1..1F5B2 ; Extended_Pictographic# E0.7 [2] (🖱️..🖲️) computer mouse..trackball -1F5B3..1F5BB ; Extended_Pictographic# E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE 1F5BC ; Extended_Pictographic# E0.7 [1] (🖼️) framed picture -1F5BD..1F5C1 ; Extended_Pictographic# E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER 1F5C2..1F5C4 ; Extended_Pictographic# E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet -1F5C5..1F5D0 ; Extended_Pictographic# E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES 1F5D1..1F5D3 ; Extended_Pictographic# E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar -1F5D4..1F5DB ; Extended_Pictographic# E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL 1F5DC..1F5DE ; Extended_Pictographic# E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper -1F5DF..1F5E0 ; Extended_Pictographic# E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART 1F5E1 ; Extended_Pictographic# E0.7 [1] (🗡️) dagger -1F5E2 ; Extended_Pictographic# E0.0 [1] (🗢) LIPS 1F5E3 ; Extended_Pictographic# E0.7 [1] (🗣️) speaking head -1F5E4..1F5E7 ; Extended_Pictographic# E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT 1F5E8 ; Extended_Pictographic# E2.0 [1] (🗨️) left speech bubble -1F5E9..1F5EE ; Extended_Pictographic# E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE 1F5EF ; Extended_Pictographic# E0.7 [1] (🗯️) right anger bubble -1F5F0..1F5F2 ; Extended_Pictographic# E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD 1F5F3 ; Extended_Pictographic# E0.7 [1] (🗳️) ballot box with ballot -1F5F4..1F5F9 ; Extended_Pictographic# E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK 1F5FA ; Extended_Pictographic# E0.7 [1] (🗺️) world map 1F5FB..1F5FF ; Extended_Pictographic# E0.6 [5] (🗻..🗿) mount fuji..moai 1F600 ; Extended_Pictographic# E1.0 [1] (😀) grinning face @@ -1210,26 +1152,22 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F6BF ; Extended_Pictographic# E1.0 [1] (🚿) shower 1F6C0 ; Extended_Pictographic# E0.6 [1] (🛀) person taking bath 1F6C1..1F6C5 ; Extended_Pictographic# E1.0 [5] (🛁..🛅) bathtub..left luggage -1F6C6..1F6CA ; Extended_Pictographic# E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL 1F6CB ; Extended_Pictographic# E0.7 [1] (🛋️) couch and lamp 1F6CC ; Extended_Pictographic# E1.0 [1] (🛌) person in bed 1F6CD..1F6CF ; Extended_Pictographic# E0.7 [3] (🛍️..🛏️) shopping bags..bed 1F6D0 ; Extended_Pictographic# E1.0 [1] (🛐) place of worship 1F6D1..1F6D2 ; Extended_Pictographic# E3.0 [2] (🛑..🛒) stop sign..shopping cart -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] (🛘..🛛) .. +1F6D8 ; Extended_Pictographic# E17.0 [1] (🛘) landslide +1F6D9..1F6DB ; Extended_Pictographic# E0.0 [3] (🛙..🛛) .. 1F6DC ; Extended_Pictographic# E15.0 [1] (🛜) wireless 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 1F6E9 ; Extended_Pictographic# E0.7 [1] (🛩️) small airplane -1F6EA ; Extended_Pictographic# E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE 1F6EB..1F6EC ; Extended_Pictographic# E1.0 [2] (🛫..🛬) airplane departure..airplane arrival 1F6ED..1F6EF ; Extended_Pictographic# E0.0 [3] (🛭..🛯) .. 1F6F0 ; Extended_Pictographic# E0.7 [1] (🛰️) satellite -1F6F1..1F6F2 ; Extended_Pictographic# E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE 1F6F3 ; Extended_Pictographic# E0.7 [1] (🛳️) passenger ship 1F6F4..1F6F6 ; Extended_Pictographic# E3.0 [3] (🛴..🛶) kick scooter..canoe 1F6F7..1F6F8 ; Extended_Pictographic# E5.0 [2] (🛷..🛸) sled..flying saucer @@ -1237,8 +1175,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] (🛽..🛿) .. -1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS -1F7D5..1F7DF ; Extended_Pictographic# E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. +1F7DA..1F7DF ; Extended_Pictographic# E0.0 [6] (🟚..🟟) .. 1F7E0..1F7EB ; Extended_Pictographic# E12.0 [12] (🟠..🟫) orange circle..brown square 1F7EC..1F7EF ; Extended_Pictographic# E0.0 [4] (🟬..🟯) .. 1F7F0 ; Extended_Pictographic# E14.0 [1] (🟰) heavy equals sign @@ -1247,7 +1184,10 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F848..1F84F ; Extended_Pictographic# E0.0 [8] (🡈..🡏) .. 1F85A..1F85F ; Extended_Pictographic# E0.0 [6] (🡚..🡟) .. 1F888..1F88F ; Extended_Pictographic# E0.0 [8] (🢈..🢏) .. -1F8AE..1F8FF ; Extended_Pictographic# E0.0 [82] (🢮..🣿) .. +1F8AE..1F8AF ; Extended_Pictographic# E0.0 [2] (🢮..🢯) .. +1F8BC..1F8BF ; Extended_Pictographic# E0.0 [4] (🢼..🢿) .. +1F8C2..1F8CF ; Extended_Pictographic# E0.0 [14] (🣂..🣏) .. +1F8D9..1F8FF ; Extended_Pictographic# E0.0 [39] (🣙..🣿) .. 1F90C ; Extended_Pictographic# E13.0 [1] (🤌) pinched fingers 1F90D..1F90F ; Extended_Pictographic# E12.0 [3] (🤍..🤏) white heart..pinching hand 1F910..1F918 ; Extended_Pictographic# E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns @@ -1293,7 +1233,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F9CD..1F9CF ; Extended_Pictographic# E12.0 [3] (🧍..🧏) person standing..deaf person 1F9D0..1F9E6 ; Extended_Pictographic# E5.0 [23] (🧐..🧦) face with monocle..socks 1F9E7..1F9FF ; Extended_Pictographic# E11.0 [25] (🧧..🧿) red envelope..nazar amulet -1FA00..1FA6F ; Extended_Pictographic# E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. +1FA58..1FA5F ; Extended_Pictographic# E0.0 [8] (🩘..🩟) .. +1FA6E..1FA6F ; Extended_Pictographic# E0.0 [2] (🩮..🩯) .. 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 @@ -1304,7 +1245,9 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FA83..1FA86 ; Extended_Pictographic# E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Extended_Pictographic# E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Extended_Pictographic# E16.0 [1] (🪉) harp -1FA8A..1FA8E ; Extended_Pictographic# E0.0 [5] (🪊..🪎) .. +1FA8A ; Extended_Pictographic# E17.0 [1] (🪊) trombone +1FA8B..1FA8D ; Extended_Pictographic# E0.0 [3] (🪋..🪍) .. +1FA8E ; Extended_Pictographic# E17.0 [1] (🪎) treasure chest 1FA8F ; Extended_Pictographic# E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Extended_Pictographic# E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Extended_Pictographic# E13.0 [19] (🪖..🪨) military helmet..rock @@ -1318,7 +1261,10 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FAC0..1FAC2 ; Extended_Pictographic# E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Extended_Pictographic# E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Extended_Pictographic# E16.0 [1] (🫆) fingerprint -1FAC7..1FACD ; Extended_Pictographic# E0.0 [7] (🫇..🫍) .. +1FAC7 ; Extended_Pictographic# E0.0 [1] (🫇) +1FAC8 ; Extended_Pictographic# E17.0 [1] (🫈) hairy creature +1FAC9..1FACC ; Extended_Pictographic# E0.0 [4] (🫉..🫌) .. +1FACD ; Extended_Pictographic# E17.0 [1] (🫍) orca 1FACE..1FACF ; Extended_Pictographic# E15.0 [2] (🫎..🫏) moose..donkey 1FAD0..1FAD6 ; Extended_Pictographic# E13.0 [7] (🫐..🫖) blueberries..teapot 1FAD7..1FAD9 ; Extended_Pictographic# E14.0 [3] (🫗..🫙) pouring liquid..jar @@ -1329,12 +1275,14 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FAE0..1FAE7 ; Extended_Pictographic# E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Extended_Pictographic# E15.0 [1] (🫨) shaking face 1FAE9 ; Extended_Pictographic# E16.0 [1] (🫩) face with bags under eyes -1FAEA..1FAEF ; Extended_Pictographic# E0.0 [6] (🫪..🫯) .. +1FAEA ; Extended_Pictographic# E17.0 [1] (🫪) distorted face +1FAEB..1FAEE ; Extended_Pictographic# E0.0 [4] (🫫..🫮) .. +1FAEF ; Extended_Pictographic# E17.0 [1] (🫯) fight cloud 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] (🫹..🫿) .. 1FC00..1FFFD ; Extended_Pictographic# E0.0[1022] (🰀..🿽) .. -# Total elements: 3537 +# Total elements: 2848 #EOF diff --git a/admin/unidata/emoji-sequences.txt b/admin/unidata/emoji-sequences.txt index 1c34ad00f13..5457b28db16 100644 --- a/admin/unidata/emoji-sequences.txt +++ b/admin/unidata/emoji-sequences.txt @@ -1,11 +1,11 @@ # emoji-sequences.txt -# Date: 2024-05-01, 21:25:24 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-07-25, 17:54:32 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Sequence Data for UTS #51 -# Version: 16.0 +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -238,6 +238,7 @@ 1F6D1..1F6D2 ; Basic_Emoji ; stop sign..shopping cart # E3.0 [2] (🛑..🛒) 1F6D5 ; Basic_Emoji ; hindu temple # E12.0 [1] (🛕) 1F6D6..1F6D7 ; Basic_Emoji ; hut..elevator # E13.0 [2] (🛖..🛗) +1F6D8 ; Basic_Emoji ; landslide # E17.0 [1] (🛘) 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] (🛫..🛬) @@ -302,6 +303,8 @@ 1FA83..1FA86 ; Basic_Emoji ; boomerang..nesting dolls # E13.0 [4] (🪃..🪆) 1FA87..1FA88 ; Basic_Emoji ; maracas..flute # E15.0 [2] (🪇..🪈) 1FA89 ; Basic_Emoji ; harp # E16.0 [1] (🪉) +1FA8A ; Basic_Emoji ; trombone # E17.0 [1] (🪊) +1FA8E ; Basic_Emoji ; treasure chest # E17.0 [1] (🪎) 1FA8F ; Basic_Emoji ; shovel # E16.0 [1] (🪏) 1FA90..1FA95 ; Basic_Emoji ; ringed planet..banjo # E12.0 [6] (🪐..🪕) 1FA96..1FAA8 ; Basic_Emoji ; military helmet..rock # E13.0 [19] (🪖..🪨) @@ -315,6 +318,8 @@ 1FAC0..1FAC2 ; Basic_Emoji ; anatomical heart..people hugging # E13.0 [3] (🫀..🫂) 1FAC3..1FAC5 ; Basic_Emoji ; pregnant man..person with crown # E14.0 [3] (🫃..🫅) 1FAC6 ; Basic_Emoji ; fingerprint # E16.0 [1] (🫆) +1FAC8 ; Basic_Emoji ; hairy creature # E17.0 [1] (🫈) +1FACD ; Basic_Emoji ; orca # E17.0 [1] (🫍) 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] (🫗..🫙) @@ -324,6 +329,8 @@ 1FAE0..1FAE7 ; Basic_Emoji ; melting face..bubbles # E14.0 [8] (🫠..🫧) 1FAE8 ; Basic_Emoji ; shaking face # E15.0 [1] (🫨) 1FAE9 ; Basic_Emoji ; face with bags under eyes # E16.0 [1] (🫩) +1FAEA ; Basic_Emoji ; distorted face # E17.0 [1] (🫪) +1FAEF ; Basic_Emoji ; fight cloud # E17.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] (🫷..🫸) 00A9 FE0F ; Basic_Emoji ; copyright # E0.6 [1] (©️) @@ -534,7 +541,7 @@ 1F6F0 FE0F ; Basic_Emoji ; satellite # E0.7 [1] (🛰️) 1F6F3 FE0F ; Basic_Emoji ; passenger ship # E0.7 [1] (🛳️) -# Total elements: 1393 +# Total elements: 1400 # ================================================ @@ -1011,6 +1018,11 @@ 1F46E 1F3FD ; RGI_Emoji_Modifier_Sequence ; police officer: medium skin tone # E1.0 [1] (👮🏽) 1F46E 1F3FE ; RGI_Emoji_Modifier_Sequence ; police officer: medium-dark skin tone # E1.0 [1] (👮🏾) 1F46E 1F3FF ; RGI_Emoji_Modifier_Sequence ; police officer: dark skin tone # E1.0 [1] (👮🏿) +1F46F 1F3FB ; RGI_Emoji_Modifier_Sequence ; people with bunny ears: light skin tone # E17.0 [1] (👯🏻) +1F46F 1F3FC ; RGI_Emoji_Modifier_Sequence ; people with bunny ears: medium-light skin tone # E17.0 [1] (👯🏼) +1F46F 1F3FD ; RGI_Emoji_Modifier_Sequence ; people with bunny ears: medium skin tone # E17.0 [1] (👯🏽) +1F46F 1F3FE ; RGI_Emoji_Modifier_Sequence ; people with bunny ears: medium-dark skin tone # E17.0 [1] (👯🏾) +1F46F 1F3FF ; RGI_Emoji_Modifier_Sequence ; people with bunny ears: dark skin tone # E17.0 [1] (👯🏿) 1F470 1F3FB ; RGI_Emoji_Modifier_Sequence ; person with veil: light skin tone # E1.0 [1] (👰🏻) 1F470 1F3FC ; RGI_Emoji_Modifier_Sequence ; person with veil: medium-light skin tone # E1.0 [1] (👰🏼) 1F470 1F3FD ; RGI_Emoji_Modifier_Sequence ; person with veil: medium skin tone # E1.0 [1] (👰🏽) @@ -1311,6 +1323,11 @@ 1F939 1F3FD ; RGI_Emoji_Modifier_Sequence ; person juggling: medium skin tone # E3.0 [1] (🤹🏽) 1F939 1F3FE ; RGI_Emoji_Modifier_Sequence ; person juggling: medium-dark skin tone # E3.0 [1] (🤹🏾) 1F939 1F3FF ; RGI_Emoji_Modifier_Sequence ; person juggling: dark skin tone # E3.0 [1] (🤹🏿) +1F93C 1F3FB ; RGI_Emoji_Modifier_Sequence ; people wrestling: light skin tone # E17.0 [1] (🤼🏻) +1F93C 1F3FC ; RGI_Emoji_Modifier_Sequence ; people wrestling: medium-light skin tone # E17.0 [1] (🤼🏼) +1F93C 1F3FD ; RGI_Emoji_Modifier_Sequence ; people wrestling: medium skin tone # E17.0 [1] (🤼🏽) +1F93C 1F3FE ; RGI_Emoji_Modifier_Sequence ; people wrestling: medium-dark skin tone # E17.0 [1] (🤼🏾) +1F93C 1F3FF ; RGI_Emoji_Modifier_Sequence ; people wrestling: dark skin tone # E17.0 [1] (🤼🏿) 1F93D 1F3FB ; RGI_Emoji_Modifier_Sequence ; person playing water polo: light skin tone # E3.0 [1] (🤽🏻) 1F93D 1F3FC ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium-light skin tone # E3.0 [1] (🤽🏼) 1F93D 1F3FD ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium skin tone # E3.0 [1] (🤽🏽) @@ -1492,6 +1509,6 @@ 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: 665 #EOF diff --git a/admin/unidata/emoji-test.txt b/admin/unidata/emoji-test.txt index 5339155277e..e42fdef4943 100644 --- a/admin/unidata/emoji-test.txt +++ b/admin/unidata/emoji-test.txt @@ -1,11 +1,11 @@ # emoji-test.txt -# Date: 2024-08-14, 23:51:54 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-08-04, 20:55:31 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Keyboard/Display Test Data for UTS #51 -# Version: 16.0 +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -14,16 +14,20 @@ # Code points — list of one or more hex code points, separated by spaces # Status # component — an Emoji_Component, -# excluding Regional_Indicators, ASCII, and non-Emoji. +# excluding Regional_Indicator, ASCII, and non-Emoji # fully-qualified — a fully-qualified emoji (see ED-18 in UTS #51), # excluding Emoji_Component # minimally-qualified — a minimally-qualified emoji (see ED-18a in UTS #51) -# unqualified — a unqualified emoji (See ED-19 in UTS #51) +# unqualified — an unqualified emoji (see ED-19 in UTS #51) # Notes: +# • A mapping of these status values to RGI_Emoji_Qualification property values +# is given by ED-28 in UTS #51. # • This includes the emoji components that need emoji presentation (skin tone and hair) # when isolated, but omits the components that need not have an emoji -# presentation when isolated. -# • The RGI set is covered by the listed fully-qualified emoji. +# presentation when isolated. See ED-20 in UTS #51 for further information. +# • The RGI emoji set corresponds to the RGI_Emoji property and contains the same sequences +# as the union of the sets of component and fully-qualified sequences in this file. +# See ED-27 in UTS #51 for further information. # • The listed minimally-qualified and unqualified cover all cases where an # element of the RGI set is missing one or more emoji presentation selectors. # • The file is in CLDR order, not codepoint order. This is recommended (but not required!) for keyboard palettes. @@ -141,6 +145,7 @@ 1F62F ; fully-qualified # 😯 E1.0 hushed face 1F632 ; fully-qualified # 😲 E0.6 astonished face 1F633 ; fully-qualified # 😳 E0.6 flushed face +1FAEA ; fully-qualified # 🫪 E17.0 distorted face 1F97A ; fully-qualified # 🥺 E11.0 pleading face 1F979 ; fully-qualified # 🥹 E14.0 face holding back tears 1F626 ; fully-qualified # 😦 E1.0 frowning face with open mouth @@ -231,6 +236,7 @@ 1F48B ; fully-qualified # 💋 E0.6 kiss mark 1F4AF ; fully-qualified # 💯 E0.6 hundred points 1F4A2 ; fully-qualified # 💢 E0.6 anger symbol +1FAEF ; fully-qualified # 🫯 E17.0 fight cloud 1F4A5 ; fully-qualified # 💥 E0.6 collision 1F4AB ; fully-qualified # 💫 E0.6 dizzy 1F4A6 ; fully-qualified # 💦 E0.6 sweat droplets @@ -249,8 +255,8 @@ 1F4AD ; fully-qualified # 💭 E1.0 thought balloon 1F4A4 ; fully-qualified # 💤 E0.6 ZZZ -# Smileys & Emotion subtotal: 185 -# Smileys & Emotion subtotal: 185 w/o modifiers +# Smileys & Emotion subtotal: 187 +# Smileys & Emotion subtotal: 187 w/o modifiers # group: People & Body @@ -1978,6 +1984,7 @@ 1F9DF 200D 2640 FE0F ; fully-qualified # 🧟‍♀️ E5.0 woman zombie 1F9DF 200D 2640 ; minimally-qualified # 🧟‍♀ E5.0 woman zombie 1F9CC ; fully-qualified # 🧌 E14.0 troll +1FAC8 ; fully-qualified # 🫈 E17.0 hairy creature # subgroup: person-activity 1F486 ; fully-qualified # 💆 E0.6 person getting massage @@ -2502,6 +2509,12 @@ 1F3C3 1F3FF 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃🏿‍♂‍➡️ E15.1 man running facing right: dark skin tone 1F3C3 1F3FF 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃🏿‍♂️‍➡ E15.1 man running facing right: dark skin tone 1F3C3 1F3FF 200D 2642 200D 27A1 ; minimally-qualified # 🏃🏿‍♂‍➡ E15.1 man running facing right: dark skin tone +1F9D1 200D 1FA70 ; fully-qualified # 🧑‍🩰 E17.0 ballet dancer +1F9D1 1F3FB 200D 1FA70 ; fully-qualified # 🧑🏻‍🩰 E17.0 ballet dancer: light skin tone +1F9D1 1F3FC 200D 1FA70 ; fully-qualified # 🧑🏼‍🩰 E17.0 ballet dancer: medium-light skin tone +1F9D1 1F3FD 200D 1FA70 ; fully-qualified # 🧑🏽‍🩰 E17.0 ballet dancer: medium skin tone +1F9D1 1F3FE 200D 1FA70 ; fully-qualified # 🧑🏾‍🩰 E17.0 ballet dancer: medium-dark skin tone +1F9D1 1F3FF 200D 1FA70 ; fully-qualified # 🧑🏿‍🩰 E17.0 ballet dancer: dark skin tone 1F483 ; fully-qualified # 💃 E0.6 woman dancing 1F483 1F3FB ; fully-qualified # 💃🏻 E1.0 woman dancing: light skin tone 1F483 1F3FC ; fully-qualified # 💃🏼 E1.0 woman dancing: medium-light skin tone @@ -2522,10 +2535,95 @@ 1F574 1F3FE ; fully-qualified # 🕴🏾 E4.0 person in suit levitating: medium-dark skin tone 1F574 1F3FF ; fully-qualified # 🕴🏿 E4.0 person in suit levitating: dark skin tone 1F46F ; fully-qualified # 👯 E0.6 people with bunny ears +1F46F 1F3FB ; fully-qualified # 👯🏻 E17.0 people with bunny ears: light skin tone +1F46F 1F3FC ; fully-qualified # 👯🏼 E17.0 people with bunny ears: medium-light skin tone +1F46F 1F3FD ; fully-qualified # 👯🏽 E17.0 people with bunny ears: medium skin tone +1F46F 1F3FE ; fully-qualified # 👯🏾 E17.0 people with bunny ears: medium-dark skin tone +1F46F 1F3FF ; fully-qualified # 👯🏿 E17.0 people with bunny ears: dark skin tone 1F46F 200D 2642 FE0F ; fully-qualified # 👯‍♂️ E4.0 men with bunny ears 1F46F 200D 2642 ; minimally-qualified # 👯‍♂ E4.0 men with bunny ears +1F46F 1F3FB 200D 2642 FE0F ; fully-qualified # 👯🏻‍♂️ E17.0 men with bunny ears: light skin tone +1F46F 1F3FB 200D 2642 ; minimally-qualified # 👯🏻‍♂ E17.0 men with bunny ears: light skin tone +1F46F 1F3FC 200D 2642 FE0F ; fully-qualified # 👯🏼‍♂️ E17.0 men with bunny ears: medium-light skin tone +1F46F 1F3FC 200D 2642 ; minimally-qualified # 👯🏼‍♂ E17.0 men with bunny ears: medium-light skin tone +1F46F 1F3FD 200D 2642 FE0F ; fully-qualified # 👯🏽‍♂️ E17.0 men with bunny ears: medium skin tone +1F46F 1F3FD 200D 2642 ; minimally-qualified # 👯🏽‍♂ E17.0 men with bunny ears: medium skin tone +1F46F 1F3FE 200D 2642 FE0F ; fully-qualified # 👯🏾‍♂️ E17.0 men with bunny ears: medium-dark skin tone +1F46F 1F3FE 200D 2642 ; minimally-qualified # 👯🏾‍♂ E17.0 men with bunny ears: medium-dark skin tone +1F46F 1F3FF 200D 2642 FE0F ; fully-qualified # 👯🏿‍♂️ E17.0 men with bunny ears: dark skin tone +1F46F 1F3FF 200D 2642 ; minimally-qualified # 👯🏿‍♂ E17.0 men with bunny ears: dark skin tone 1F46F 200D 2640 FE0F ; fully-qualified # 👯‍♀️ E4.0 women with bunny ears 1F46F 200D 2640 ; minimally-qualified # 👯‍♀ E4.0 women with bunny ears +1F46F 1F3FB 200D 2640 FE0F ; fully-qualified # 👯🏻‍♀️ E17.0 women with bunny ears: light skin tone +1F46F 1F3FB 200D 2640 ; minimally-qualified # 👯🏻‍♀ E17.0 women with bunny ears: light skin tone +1F46F 1F3FC 200D 2640 FE0F ; fully-qualified # 👯🏼‍♀️ E17.0 women with bunny ears: medium-light skin tone +1F46F 1F3FC 200D 2640 ; minimally-qualified # 👯🏼‍♀ E17.0 women with bunny ears: medium-light skin tone +1F46F 1F3FD 200D 2640 FE0F ; fully-qualified # 👯🏽‍♀️ E17.0 women with bunny ears: medium skin tone +1F46F 1F3FD 200D 2640 ; minimally-qualified # 👯🏽‍♀ E17.0 women with bunny ears: medium skin tone +1F46F 1F3FE 200D 2640 FE0F ; fully-qualified # 👯🏾‍♀️ E17.0 women with bunny ears: medium-dark skin tone +1F46F 1F3FE 200D 2640 ; minimally-qualified # 👯🏾‍♀ E17.0 women with bunny ears: medium-dark skin tone +1F46F 1F3FF 200D 2640 FE0F ; fully-qualified # 👯🏿‍♀️ E17.0 women with bunny ears: dark skin tone +1F46F 1F3FF 200D 2640 ; minimally-qualified # 👯🏿‍♀ E17.0 women with bunny ears: dark skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍🐰‍🧑🏼 E17.0 people with bunny ears: light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍🐰‍🧑🏽 E17.0 people with bunny ears: light skin tone, medium skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍🐰‍🧑🏾 E17.0 people with bunny ears: light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍🐰‍🧑🏿 E17.0 people with bunny ears: light skin tone, dark skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍🐰‍🧑🏻 E17.0 people with bunny ears: medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍🐰‍🧑🏽 E17.0 people with bunny ears: medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍🐰‍🧑🏾 E17.0 people with bunny ears: medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍🐰‍🧑🏿 E17.0 people with bunny ears: medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍🐰‍🧑🏻 E17.0 people with bunny ears: medium skin tone, light skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍🐰‍🧑🏼 E17.0 people with bunny ears: medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍🐰‍🧑🏾 E17.0 people with bunny ears: medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍🐰‍🧑🏿 E17.0 people with bunny ears: medium skin tone, dark skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍🐰‍🧑🏻 E17.0 people with bunny ears: medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍🐰‍🧑🏼 E17.0 people with bunny ears: medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍🐰‍🧑🏽 E17.0 people with bunny ears: medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍🐰‍🧑🏿 E17.0 people with bunny ears: medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍🐰‍🧑🏻 E17.0 people with bunny ears: dark skin tone, light skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍🐰‍🧑🏼 E17.0 people with bunny ears: dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍🐰‍🧑🏽 E17.0 people with bunny ears: dark skin tone, medium skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍🐰‍🧑🏾 E17.0 people with bunny ears: dark skin tone, medium-dark skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍🐰‍👨🏼 E17.0 men with bunny ears: light skin tone, medium-light skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍🐰‍👨🏽 E17.0 men with bunny ears: light skin tone, medium skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍🐰‍👨🏾 E17.0 men with bunny ears: light skin tone, medium-dark skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍🐰‍👨🏿 E17.0 men with bunny ears: light skin tone, dark skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍🐰‍👨🏻 E17.0 men with bunny ears: medium-light skin tone, light skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍🐰‍👨🏽 E17.0 men with bunny ears: medium-light skin tone, medium skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍🐰‍👨🏾 E17.0 men with bunny ears: medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍🐰‍👨🏿 E17.0 men with bunny ears: medium-light skin tone, dark skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍🐰‍👨🏻 E17.0 men with bunny ears: medium skin tone, light skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍🐰‍👨🏼 E17.0 men with bunny ears: medium skin tone, medium-light skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍🐰‍👨🏾 E17.0 men with bunny ears: medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍🐰‍👨🏿 E17.0 men with bunny ears: medium skin tone, dark skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍🐰‍👨🏻 E17.0 men with bunny ears: medium-dark skin tone, light skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍🐰‍👨🏼 E17.0 men with bunny ears: medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍🐰‍👨🏽 E17.0 men with bunny ears: medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍🐰‍👨🏿 E17.0 men with bunny ears: medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍🐰‍👨🏻 E17.0 men with bunny ears: dark skin tone, light skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍🐰‍👨🏼 E17.0 men with bunny ears: dark skin tone, medium-light skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍🐰‍👨🏽 E17.0 men with bunny ears: dark skin tone, medium skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍🐰‍👨🏾 E17.0 men with bunny ears: dark skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍🐰‍👩🏼 E17.0 women with bunny ears: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍🐰‍👩🏽 E17.0 women with bunny ears: light skin tone, medium skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍🐰‍👩🏾 E17.0 women with bunny ears: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍🐰‍👩🏿 E17.0 women with bunny ears: light skin tone, dark skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍🐰‍👩🏻 E17.0 women with bunny ears: medium-light skin tone, light skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍🐰‍👩🏽 E17.0 women with bunny ears: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍🐰‍👩🏾 E17.0 women with bunny ears: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍🐰‍👩🏿 E17.0 women with bunny ears: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍🐰‍👩🏻 E17.0 women with bunny ears: medium skin tone, light skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍🐰‍👩🏼 E17.0 women with bunny ears: medium skin tone, medium-light skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍🐰‍👩🏾 E17.0 women with bunny ears: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍🐰‍👩🏿 E17.0 women with bunny ears: medium skin tone, dark skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍🐰‍👩🏻 E17.0 women with bunny ears: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍🐰‍👩🏼 E17.0 women with bunny ears: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍🐰‍👩🏽 E17.0 women with bunny ears: medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍🐰‍👩🏿 E17.0 women with bunny ears: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍🐰‍👩🏻 E17.0 women with bunny ears: dark skin tone, light skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍🐰‍👩🏼 E17.0 women with bunny ears: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍🐰‍👩🏽 E17.0 women with bunny ears: dark skin tone, medium skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍🐰‍👩🏾 E17.0 women with bunny ears: dark skin tone, medium-dark skin tone 1F9D6 ; fully-qualified # 🧖 E5.0 person in steamy room 1F9D6 1F3FB ; fully-qualified # 🧖🏻 E5.0 person in steamy room: light skin tone 1F9D6 1F3FC ; fully-qualified # 🧖🏼 E5.0 person in steamy room: medium-light skin tone @@ -2889,10 +2987,95 @@ 1F938 1F3FF 200D 2640 FE0F ; fully-qualified # 🤸🏿‍♀️ E4.0 woman cartwheeling: dark skin tone 1F938 1F3FF 200D 2640 ; minimally-qualified # 🤸🏿‍♀ E4.0 woman cartwheeling: dark skin tone 1F93C ; fully-qualified # 🤼 E3.0 people wrestling +1F93C 1F3FB ; fully-qualified # 🤼🏻 E17.0 people wrestling: light skin tone +1F93C 1F3FC ; fully-qualified # 🤼🏼 E17.0 people wrestling: medium-light skin tone +1F93C 1F3FD ; fully-qualified # 🤼🏽 E17.0 people wrestling: medium skin tone +1F93C 1F3FE ; fully-qualified # 🤼🏾 E17.0 people wrestling: medium-dark skin tone +1F93C 1F3FF ; fully-qualified # 🤼🏿 E17.0 people wrestling: dark skin tone 1F93C 200D 2642 FE0F ; fully-qualified # 🤼‍♂️ E4.0 men wrestling 1F93C 200D 2642 ; minimally-qualified # 🤼‍♂ E4.0 men wrestling +1F93C 1F3FB 200D 2642 FE0F ; fully-qualified # 🤼🏻‍♂️ E17.0 men wrestling: light skin tone +1F93C 1F3FB 200D 2642 ; minimally-qualified # 🤼🏻‍♂ E17.0 men wrestling: light skin tone +1F93C 1F3FC 200D 2642 FE0F ; fully-qualified # 🤼🏼‍♂️ E17.0 men wrestling: medium-light skin tone +1F93C 1F3FC 200D 2642 ; minimally-qualified # 🤼🏼‍♂ E17.0 men wrestling: medium-light skin tone +1F93C 1F3FD 200D 2642 FE0F ; fully-qualified # 🤼🏽‍♂️ E17.0 men wrestling: medium skin tone +1F93C 1F3FD 200D 2642 ; minimally-qualified # 🤼🏽‍♂ E17.0 men wrestling: medium skin tone +1F93C 1F3FE 200D 2642 FE0F ; fully-qualified # 🤼🏾‍♂️ E17.0 men wrestling: medium-dark skin tone +1F93C 1F3FE 200D 2642 ; minimally-qualified # 🤼🏾‍♂ E17.0 men wrestling: medium-dark skin tone +1F93C 1F3FF 200D 2642 FE0F ; fully-qualified # 🤼🏿‍♂️ E17.0 men wrestling: dark skin tone +1F93C 1F3FF 200D 2642 ; minimally-qualified # 🤼🏿‍♂ E17.0 men wrestling: dark skin tone 1F93C 200D 2640 FE0F ; fully-qualified # 🤼‍♀️ E4.0 women wrestling 1F93C 200D 2640 ; minimally-qualified # 🤼‍♀ E4.0 women wrestling +1F93C 1F3FB 200D 2640 FE0F ; fully-qualified # 🤼🏻‍♀️ E17.0 women wrestling: light skin tone +1F93C 1F3FB 200D 2640 ; minimally-qualified # 🤼🏻‍♀ E17.0 women wrestling: light skin tone +1F93C 1F3FC 200D 2640 FE0F ; fully-qualified # 🤼🏼‍♀️ E17.0 women wrestling: medium-light skin tone +1F93C 1F3FC 200D 2640 ; minimally-qualified # 🤼🏼‍♀ E17.0 women wrestling: medium-light skin tone +1F93C 1F3FD 200D 2640 FE0F ; fully-qualified # 🤼🏽‍♀️ E17.0 women wrestling: medium skin tone +1F93C 1F3FD 200D 2640 ; minimally-qualified # 🤼🏽‍♀ E17.0 women wrestling: medium skin tone +1F93C 1F3FE 200D 2640 FE0F ; fully-qualified # 🤼🏾‍♀️ E17.0 women wrestling: medium-dark skin tone +1F93C 1F3FE 200D 2640 ; minimally-qualified # 🤼🏾‍♀ E17.0 women wrestling: medium-dark skin tone +1F93C 1F3FF 200D 2640 FE0F ; fully-qualified # 🤼🏿‍♀️ E17.0 women wrestling: dark skin tone +1F93C 1F3FF 200D 2640 ; minimally-qualified # 🤼🏿‍♀ E17.0 women wrestling: dark skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍🫯‍🧑🏼 E17.0 people wrestling: light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍🫯‍🧑🏽 E17.0 people wrestling: light skin tone, medium skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍🫯‍🧑🏾 E17.0 people wrestling: light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍🫯‍🧑🏿 E17.0 people wrestling: light skin tone, dark skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍🫯‍🧑🏻 E17.0 people wrestling: medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍🫯‍🧑🏽 E17.0 people wrestling: medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍🫯‍🧑🏾 E17.0 people wrestling: medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍🫯‍🧑🏿 E17.0 people wrestling: medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍🫯‍🧑🏻 E17.0 people wrestling: medium skin tone, light skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍🫯‍🧑🏼 E17.0 people wrestling: medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍🫯‍🧑🏾 E17.0 people wrestling: medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍🫯‍🧑🏿 E17.0 people wrestling: medium skin tone, dark skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍🫯‍🧑🏻 E17.0 people wrestling: medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍🫯‍🧑🏼 E17.0 people wrestling: medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍🫯‍🧑🏽 E17.0 people wrestling: medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍🫯‍🧑🏿 E17.0 people wrestling: medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍🫯‍🧑🏻 E17.0 people wrestling: dark skin tone, light skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍🫯‍🧑🏼 E17.0 people wrestling: dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍🫯‍🧑🏽 E17.0 people wrestling: dark skin tone, medium skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍🫯‍🧑🏾 E17.0 people wrestling: dark skin tone, medium-dark skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍🫯‍👨🏼 E17.0 men wrestling: light skin tone, medium-light skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍🫯‍👨🏽 E17.0 men wrestling: light skin tone, medium skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍🫯‍👨🏾 E17.0 men wrestling: light skin tone, medium-dark skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍🫯‍👨🏿 E17.0 men wrestling: light skin tone, dark skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍🫯‍👨🏻 E17.0 men wrestling: medium-light skin tone, light skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍🫯‍👨🏽 E17.0 men wrestling: medium-light skin tone, medium skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍🫯‍👨🏾 E17.0 men wrestling: medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍🫯‍👨🏿 E17.0 men wrestling: medium-light skin tone, dark skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍🫯‍👨🏻 E17.0 men wrestling: medium skin tone, light skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍🫯‍👨🏼 E17.0 men wrestling: medium skin tone, medium-light skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍🫯‍👨🏾 E17.0 men wrestling: medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍🫯‍👨🏿 E17.0 men wrestling: medium skin tone, dark skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍🫯‍👨🏻 E17.0 men wrestling: medium-dark skin tone, light skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍🫯‍👨🏼 E17.0 men wrestling: medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍🫯‍👨🏽 E17.0 men wrestling: medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍🫯‍👨🏿 E17.0 men wrestling: medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍🫯‍👨🏻 E17.0 men wrestling: dark skin tone, light skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍🫯‍👨🏼 E17.0 men wrestling: dark skin tone, medium-light skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍🫯‍👨🏽 E17.0 men wrestling: dark skin tone, medium skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍🫯‍👨🏾 E17.0 men wrestling: dark skin tone, medium-dark skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍🫯‍👩🏼 E17.0 women wrestling: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍🫯‍👩🏽 E17.0 women wrestling: light skin tone, medium skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍🫯‍👩🏾 E17.0 women wrestling: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍🫯‍👩🏿 E17.0 women wrestling: light skin tone, dark skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍🫯‍👩🏻 E17.0 women wrestling: medium-light skin tone, light skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍🫯‍👩🏽 E17.0 women wrestling: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍🫯‍👩🏾 E17.0 women wrestling: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍🫯‍👩🏿 E17.0 women wrestling: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍🫯‍👩🏻 E17.0 women wrestling: medium skin tone, light skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍🫯‍👩🏼 E17.0 women wrestling: medium skin tone, medium-light skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍🫯‍👩🏾 E17.0 women wrestling: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍🫯‍👩🏿 E17.0 women wrestling: medium skin tone, dark skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍🫯‍👩🏻 E17.0 women wrestling: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍🫯‍👩🏼 E17.0 women wrestling: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍🫯‍👩🏽 E17.0 women wrestling: medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍🫯‍👩🏿 E17.0 women wrestling: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍🫯‍👩🏻 E17.0 women wrestling: dark skin tone, light skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍🫯‍👩🏼 E17.0 women wrestling: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍🫯‍👩🏽 E17.0 women wrestling: dark skin tone, medium skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍🫯‍👩🏾 E17.0 women wrestling: dark skin tone, medium-dark skin tone 1F93D ; fully-qualified # 🤽 E3.0 person playing water polo 1F93D 1F3FB ; fully-qualified # 🤽🏻 E3.0 person playing water polo: light skin tone 1F93D 1F3FC ; fully-qualified # 🤽🏼 E3.0 person playing water polo: medium-light skin tone @@ -3577,8 +3760,8 @@ 1F463 ; fully-qualified # 👣 E0.6 footprints 1FAC6 ; fully-qualified # 🫆 E16.0 fingerprint -# People & Body subtotal: 3291 -# People & Body subtotal: 561 w/o modifiers +# People & Body subtotal: 3468 +# People & Body subtotal: 563 w/o modifiers # group: Component @@ -3712,6 +3895,7 @@ 1F433 ; fully-qualified # 🐳 E0.6 spouting whale 1F40B ; fully-qualified # 🐋 E1.0 whale 1F42C ; fully-qualified # 🐬 E0.6 dolphin +1FACD ; fully-qualified # 🫍 E17.0 orca 1F9AD ; fully-qualified # 🦭 E13.0 seal 1F41F ; fully-qualified # 🐟 E0.6 fish 1F420 ; fully-qualified # 🐠 E0.6 tropical fish @@ -3782,8 +3966,8 @@ 1F344 ; fully-qualified # 🍄 E0.6 mushroom 1FABE ; fully-qualified # 🪾 E16.0 leafless tree -# Animals & Nature subtotal: 166 -# Animals & Nature subtotal: 166 w/o modifiers +# Animals & Nature subtotal: 167 +# Animals & Nature subtotal: 167 w/o modifiers # group: Food & Drink @@ -3954,6 +4138,7 @@ 1F3D4 ; unqualified # 🏔 E0.7 snow-capped mountain 26F0 FE0F ; fully-qualified # ⛰️ E0.7 mountain 26F0 ; unqualified # ⛰ E0.7 mountain +1F6D8 ; fully-qualified # 🛘 E17.0 landslide 1F30B ; fully-qualified # 🌋 E0.6 volcano 1F5FB ; fully-qualified # 🗻 E0.6 mount fuji 1F3D5 FE0F ; fully-qualified # 🏕️ E0.7 camping @@ -4228,8 +4413,8 @@ 1F4A7 ; fully-qualified # 💧 E0.6 droplet 1F30A ; fully-qualified # 🌊 E0.6 water wave -# Travel & Places subtotal: 267 -# Travel & Places subtotal: 267 w/o modifiers +# Travel & Places subtotal: 268 +# Travel & Places subtotal: 268 w/o modifiers # group: Activities @@ -4423,10 +4608,11 @@ # subgroup: musical-instrument 1F3B7 ; fully-qualified # 🎷 E0.6 saxophone +1F3BA ; fully-qualified # 🎺 E0.6 trumpet +1FA8A ; fully-qualified # 🪊 E17.0 trombone 1FA97 ; fully-qualified # 🪗 E13.0 accordion 1F3B8 ; fully-qualified # 🎸 E0.6 guitar 1F3B9 ; fully-qualified # 🎹 E0.6 musical keyboard -1F3BA ; fully-qualified # 🎺 E0.6 trumpet 1F3BB ; fully-qualified # 🎻 E0.6 violin 1FA95 ; fully-qualified # 🪕 E12.0 banjo 1F941 ; fully-qualified # 🥁 E3.0 drum @@ -4508,8 +4694,9 @@ 1F3F7 ; unqualified # 🏷 E0.7 label # subgroup: money -1F4B0 ; fully-qualified # 💰 E0.6 money bag 1FA99 ; fully-qualified # 🪙 E13.0 coin +1F4B0 ; fully-qualified # 💰 E0.6 money bag +1FA8E ; fully-qualified # 🪎 E17.0 treasure chest 1F4B4 ; fully-qualified # 💴 E0.6 yen banknote 1F4B5 ; fully-qualified # 💵 E0.6 dollar banknote 1F4B6 ; fully-qualified # 💶 E1.0 euro banknote @@ -4694,8 +4881,8 @@ 1FAA7 ; fully-qualified # 🪧 E13.0 placard 1FAAA ; fully-qualified # 🪪 E14.0 identification card -# Objects subtotal: 314 -# Objects subtotal: 314 w/o modifiers +# Objects subtotal: 316 +# Objects subtotal: 316 w/o modifiers # group: Symbols @@ -5323,8 +5510,8 @@ # Flags subtotal: 276 w/o modifiers # Status Counts -# fully-qualified : 3781 -# minimally-qualified : 1009 +# fully-qualified : 3944 +# minimally-qualified : 1029 # unqualified : 243 # component : 9 diff --git a/admin/unidata/emoji-variation-sequences.txt b/admin/unidata/emoji-variation-sequences.txt index 437383539bf..8d999cf2a82 100644 --- a/admin/unidata/emoji-variation-sequences.txt +++ b/admin/unidata/emoji-variation-sequences.txt @@ -1,11 +1,11 @@ # emoji-variation-sequences.txt -# Date: 2024-05-01, 21:25:24 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-01-30, 21:48:29 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Variation Sequences for UTS #51 -# Used with Emoji Version 16.0 and subsequent minor revisions (if any) +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # diff --git a/admin/unidata/emoji-zwj-sequences.txt b/admin/unidata/emoji-zwj-sequences.txt index a4ee89839cd..0259b8ec0aa 100644 --- a/admin/unidata/emoji-zwj-sequences.txt +++ b/admin/unidata/emoji-zwj-sequences.txt @@ -1,11 +1,11 @@ # emoji-zwj-sequences.txt -# Date: 2024-08-14, 23:51:54 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-01-08, 04:57:12 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji ZWJ Sequences for UTS #51 -# Version: 16.0 +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -54,10 +54,18 @@ 1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏽) 1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium-dark skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏾) 1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, dark skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏿) +1F468 1F3FB 200D 1F430 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: light skin tone, medium-light skin tone # E17.0 [1] (👨🏻‍🐰‍👨🏼) +1F468 1F3FB 200D 1F430 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: light skin tone, medium skin tone # E17.0 [1] (👨🏻‍🐰‍👨🏽) +1F468 1F3FB 200D 1F430 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: light skin tone, medium-dark skin tone # E17.0 [1] (👨🏻‍🐰‍👨🏾) +1F468 1F3FB 200D 1F430 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: light skin tone, dark skin tone # E17.0 [1] (👨🏻‍🐰‍👨🏿) 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium-light skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏼) 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏽) 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏾) 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, dark skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏿) +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men wrestling: light skin tone, medium-light skin tone # E17.0 [1] (👨🏻‍🫯‍👨🏼) +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men wrestling: light skin tone, medium skin tone # E17.0 [1] (👨🏻‍🫯‍👨🏽) +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men wrestling: light skin tone, medium-dark skin tone # E17.0 [1] (👨🏻‍🫯‍👨🏾) +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men wrestling: light skin tone, dark skin tone # E17.0 [1] (👨🏻‍🫯‍👨🏿) 1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, light skin tone #E13.1[1] (👨🏼‍❤️‍👨🏻) 1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone # E13.1 [1] (👨🏼‍❤️‍👨🏼) 1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, medium skin tone #E13.1[1] (👨🏼‍❤️‍👨🏽) @@ -68,10 +76,18 @@ 1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, medium skin tone #E13.1 [1] (👨🏼‍❤️‍💋‍👨🏽) 1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👨🏼‍❤️‍💋‍👨🏾) 1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, dark skin tone # E13.1 [1] (👨🏼‍❤️‍💋‍👨🏿) +1F468 1F3FC 200D 1F430 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-light skin tone, light skin tone # E17.0 [1] (👨🏼‍🐰‍👨🏻) +1F468 1F3FC 200D 1F430 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-light skin tone, medium skin tone # E17.0 [1] (👨🏼‍🐰‍👨🏽) +1F468 1F3FC 200D 1F430 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-light skin tone, medium-dark skin tone #E17.0[1] (👨🏼‍🐰‍👨🏾) +1F468 1F3FC 200D 1F430 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-light skin tone, dark skin tone # E17.0 [1] (👨🏼‍🐰‍👨🏿) 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, light skin tone # E12.0 [1] (👨🏼‍🤝‍👨🏻) 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (👨🏼‍🤝‍👨🏽) 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, medium-dark skin tone #E12.1 [1] (👨🏼‍🤝‍👨🏾) 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (👨🏼‍🤝‍👨🏿) +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-light skin tone, light skin tone # E17.0 [1] (👨🏼‍🫯‍👨🏻) +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-light skin tone, medium skin tone # E17.0 [1] (👨🏼‍🫯‍👨🏽) +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-light skin tone, medium-dark skin tone # E17.0 [1] (👨🏼‍🫯‍👨🏾) +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-light skin tone, dark skin tone # E17.0 [1] (👨🏼‍🫯‍👨🏿) 1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, light skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏻) 1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, medium-light skin tone #E13.1[1] (👨🏽‍❤️‍👨🏼) 1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏽) @@ -82,10 +98,18 @@ 1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏽) 1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, medium-dark skin tone #E13.1 [1] (👨🏽‍❤️‍💋‍👨🏾) 1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, dark skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏿) +1F468 1F3FD 200D 1F430 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium skin tone, light skin tone # E17.0 [1] (👨🏽‍🐰‍👨🏻) +1F468 1F3FD 200D 1F430 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium skin tone, medium-light skin tone # E17.0 [1] (👨🏽‍🐰‍👨🏼) +1F468 1F3FD 200D 1F430 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium skin tone, medium-dark skin tone # E17.0 [1] (👨🏽‍🐰‍👨🏾) +1F468 1F3FD 200D 1F430 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium skin tone, dark skin tone # E17.0 [1] (👨🏽‍🐰‍👨🏿) 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, light skin tone # E12.0 [1] (👨🏽‍🤝‍👨🏻) 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (👨🏽‍🤝‍👨🏼) 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (👨🏽‍🤝‍👨🏾) 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, dark skin tone # E12.1 [1] (👨🏽‍🤝‍👨🏿) +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium skin tone, light skin tone # E17.0 [1] (👨🏽‍🫯‍👨🏻) +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium skin tone, medium-light skin tone # E17.0 [1] (👨🏽‍🫯‍👨🏼) +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium skin tone, medium-dark skin tone # E17.0 [1] (👨🏽‍🫯‍👨🏾) +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium skin tone, dark skin tone # E17.0 [1] (👨🏽‍🫯‍👨🏿) 1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, light skin tone #E13.1[1] (👨🏾‍❤️‍👨🏻) 1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👨🏾‍❤️‍👨🏼) 1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, medium skin tone #E13.1[1] (👨🏾‍❤️‍👨🏽) @@ -96,10 +120,18 @@ 1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, medium skin tone #E13.1 [1] (👨🏾‍❤️‍💋‍👨🏽) 1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏾) 1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, dark skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏿) +1F468 1F3FE 200D 1F430 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-dark skin tone, light skin tone # E17.0 [1] (👨🏾‍🐰‍👨🏻) +1F468 1F3FE 200D 1F430 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-dark skin tone, medium-light skin tone #E17.0[1] (👨🏾‍🐰‍👨🏼) +1F468 1F3FE 200D 1F430 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-dark skin tone, medium skin tone # E17.0 [1] (👨🏾‍🐰‍👨🏽) +1F468 1F3FE 200D 1F430 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-dark skin tone, dark skin tone # E17.0 [1] (👨🏾‍🐰‍👨🏿) 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, light skin tone # E12.0 [1] (👨🏾‍🤝‍👨🏻) 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, medium-light skin tone #E12.0 [1] (👨🏾‍🤝‍👨🏼) 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (👨🏾‍🤝‍👨🏽) 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (👨🏾‍🤝‍👨🏿) +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-dark skin tone, light skin tone # E17.0 [1] (👨🏾‍🫯‍👨🏻) +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-dark skin tone, medium-light skin tone # E17.0 [1] (👨🏾‍🫯‍👨🏼) +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-dark skin tone, medium skin tone # E17.0 [1] (👨🏾‍🫯‍👨🏽) +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-dark skin tone, dark skin tone # E17.0 [1] (👨🏾‍🫯‍👨🏿) 1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, light skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏻) 1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium-light skin tone #E13.1[1] (👨🏿‍❤️‍👨🏼) 1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏽) @@ -110,10 +142,18 @@ 1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏽) 1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium-dark skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏾) 1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏿) +1F468 1F3FF 200D 1F430 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: dark skin tone, light skin tone # E17.0 [1] (👨🏿‍🐰‍👨🏻) +1F468 1F3FF 200D 1F430 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: dark skin tone, medium-light skin tone # E17.0 [1] (👨🏿‍🐰‍👨🏼) +1F468 1F3FF 200D 1F430 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: dark skin tone, medium skin tone # E17.0 [1] (👨🏿‍🐰‍👨🏽) +1F468 1F3FF 200D 1F430 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: dark skin tone, medium-dark skin tone # E17.0 [1] (👨🏿‍🐰‍👨🏾) 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, light skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏻) 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏼) 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏽) 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏾) +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men wrestling: dark skin tone, light skin tone # E17.0 [1] (👨🏿‍🫯‍👨🏻) +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men wrestling: dark skin tone, medium-light skin tone # E17.0 [1] (👨🏿‍🫯‍👨🏼) +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men wrestling: dark skin tone, medium skin tone # E17.0 [1] (👨🏿‍🫯‍👨🏽) +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men wrestling: dark skin tone, medium-dark skin tone # E17.0 [1] (👨🏿‍🫯‍👨🏾) 1F469 200D 2764 FE0F 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man # E2.0 [1] (👩‍❤️‍👨) 1F469 200D 2764 FE0F 200D 1F469 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman # E2.0 [1] (👩‍❤️‍👩) 1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; kiss: woman, man # E2.0 [1] (👩‍❤️‍💋‍👨) @@ -148,6 +188,10 @@ 1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏽) 1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium-dark skin tone #E13.1[1] (👩🏻‍❤️‍💋‍👩🏾) 1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, dark skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏿) +1F469 1F3FB 200D 1F430 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: light skin tone, medium-light skin tone # E17.0 [1] (👩🏻‍🐰‍👩🏼) +1F469 1F3FB 200D 1F430 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: light skin tone, medium skin tone # E17.0 [1] (👩🏻‍🐰‍👩🏽) +1F469 1F3FB 200D 1F430 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: light skin tone, medium-dark skin tone # E17.0 [1] (👩🏻‍🐰‍👩🏾) +1F469 1F3FB 200D 1F430 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: light skin tone, dark skin tone # E17.0 [1] (👩🏻‍🐰‍👩🏿) 1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium-light skin tone #E12.0[1] (👩🏻‍🤝‍👨🏼) 1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium skin tone # E12.0 [1] (👩🏻‍🤝‍👨🏽) 1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium-dark skin tone #E12.0[1] (👩🏻‍🤝‍👨🏾) @@ -156,6 +200,10 @@ 1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏽) 1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏾) 1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, dark skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏿) +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women wrestling: light skin tone, medium-light skin tone # E17.0 [1] (👩🏻‍🫯‍👩🏼) +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women wrestling: light skin tone, medium skin tone # E17.0 [1] (👩🏻‍🫯‍👩🏽) +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women wrestling: light skin tone, medium-dark skin tone # E17.0 [1] (👩🏻‍🫯‍👩🏾) +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women wrestling: light skin tone, dark skin tone # E17.0 [1] (👩🏻‍🫯‍👩🏿) 1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍👨🏻) 1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍👨🏼) 1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍👨🏽) @@ -176,6 +224,10 @@ 1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏽) 1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏾) 1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏿) +1F469 1F3FC 200D 1F430 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-light skin tone, light skin tone # E17.0 [1] (👩🏼‍🐰‍👩🏻) +1F469 1F3FC 200D 1F430 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-light skin tone, medium skin tone #E17.0 [1] (👩🏼‍🐰‍👩🏽) +1F469 1F3FC 200D 1F430 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-light skin tone, medium-dark skin tone #E17.0[1] (👩🏼‍🐰‍👩🏾) +1F469 1F3FC 200D 1F430 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-light skin tone, dark skin tone # E17.0 [1] (👩🏼‍🐰‍👩🏿) 1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, light skin tone #E12.0[1] (👩🏼‍🤝‍👨🏻) 1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, medium skin tone #E12.0[1] (👩🏼‍🤝‍👨🏽) 1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, medium-dark skin tone #E12.0[1] (👩🏼‍🤝‍👨🏾) @@ -184,6 +236,10 @@ 1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (👩🏼‍🤝‍👩🏽) 1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, medium-dark skin tone #E12.1[1] (👩🏼‍🤝‍👩🏾) 1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (👩🏼‍🤝‍👩🏿) +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-light skin tone, light skin tone # E17.0 [1] (👩🏼‍🫯‍👩🏻) +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-light skin tone, medium skin tone # E17.0 [1] (👩🏼‍🫯‍👩🏽) +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-light skin tone, medium-dark skin tone # E17.0 [1] (👩🏼‍🫯‍👩🏾) +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-light skin tone, dark skin tone # E17.0 [1] (👩🏼‍🫯‍👩🏿) 1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, light skin tone #E13.1 [1] (👩🏽‍❤️‍👨🏻) 1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍👨🏼) 1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone # E13.1 [1] (👩🏽‍❤️‍👨🏽) @@ -204,6 +260,10 @@ 1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏽) 1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👩🏾) 1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, dark skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏿) +1F469 1F3FD 200D 1F430 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium skin tone, light skin tone # E17.0 [1] (👩🏽‍🐰‍👩🏻) +1F469 1F3FD 200D 1F430 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium skin tone, medium-light skin tone #E17.0 [1] (👩🏽‍🐰‍👩🏼) +1F469 1F3FD 200D 1F430 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium skin tone, medium-dark skin tone # E17.0 [1] (👩🏽‍🐰‍👩🏾) +1F469 1F3FD 200D 1F430 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium skin tone, dark skin tone # E17.0 [1] (👩🏽‍🐰‍👩🏿) 1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, light skin tone # E12.0 [1] (👩🏽‍🤝‍👨🏻) 1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, medium-light skin tone #E12.0[1] (👩🏽‍🤝‍👨🏼) 1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, medium-dark skin tone #E12.0[1] (👩🏽‍🤝‍👨🏾) @@ -212,6 +272,10 @@ 1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (👩🏽‍🤝‍👩🏼) 1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (👩🏽‍🤝‍👩🏾) 1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, dark skin tone # E12.1 [1] (👩🏽‍🤝‍👩🏿) +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium skin tone, light skin tone # E17.0 [1] (👩🏽‍🫯‍👩🏻) +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium skin tone, medium-light skin tone # E17.0 [1] (👩🏽‍🫯‍👩🏼) +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium skin tone, medium-dark skin tone # E17.0 [1] (👩🏽‍🫯‍👩🏾) +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium skin tone, dark skin tone # E17.0 [1] (👩🏽‍🫯‍👩🏿) 1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, light skin tone #E13.1[1] (👩🏾‍❤️‍👨🏻) 1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍👨🏼) 1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍👨🏽) @@ -232,6 +296,10 @@ 1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏽) 1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍💋‍👩🏾) 1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, dark skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏿) +1F469 1F3FE 200D 1F430 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-dark skin tone, light skin tone # E17.0 [1] (👩🏾‍🐰‍👩🏻) +1F469 1F3FE 200D 1F430 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-dark skin tone, medium-light skin tone #E17.0[1] (👩🏾‍🐰‍👩🏼) +1F469 1F3FE 200D 1F430 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-dark skin tone, medium skin tone # E17.0 [1] (👩🏾‍🐰‍👩🏽) +1F469 1F3FE 200D 1F430 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-dark skin tone, dark skin tone # E17.0 [1] (👩🏾‍🐰‍👩🏿) 1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, light skin tone #E12.0[1] (👩🏾‍🤝‍👨🏻) 1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (👩🏾‍🤝‍👨🏼) 1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, medium skin tone #E12.0[1] (👩🏾‍🤝‍👨🏽) @@ -240,6 +308,10 @@ 1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (👩🏾‍🤝‍👩🏼) 1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (👩🏾‍🤝‍👩🏽) 1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (👩🏾‍🤝‍👩🏿) +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-dark skin tone, light skin tone # E17.0 [1] (👩🏾‍🫯‍👩🏻) +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-dark skin tone, medium-light skin tone # E17.0 [1] (👩🏾‍🫯‍👩🏼) +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-dark skin tone, medium skin tone # E17.0 [1] (👩🏾‍🫯‍👩🏽) +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-dark skin tone, dark skin tone # E17.0 [1] (👩🏾‍🫯‍👩🏿) 1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, light skin tone # E13.1 [1] (👩🏿‍❤️‍👨🏻) 1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium-light skin tone #E13.1[1] (👩🏿‍❤️‍👨🏼) 1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium skin tone #E13.1 [1] (👩🏿‍❤️‍👨🏽) @@ -260,6 +332,10 @@ 1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏽) 1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium-dark skin tone #E13.1[1] (👩🏿‍❤️‍💋‍👩🏾) 1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏿) +1F469 1F3FF 200D 1F430 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: dark skin tone, light skin tone # E17.0 [1] (👩🏿‍🐰‍👩🏻) +1F469 1F3FF 200D 1F430 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: dark skin tone, medium-light skin tone # E17.0 [1] (👩🏿‍🐰‍👩🏼) +1F469 1F3FF 200D 1F430 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: dark skin tone, medium skin tone # E17.0 [1] (👩🏿‍🐰‍👩🏽) +1F469 1F3FF 200D 1F430 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: dark skin tone, medium-dark skin tone # E17.0 [1] (👩🏿‍🐰‍👩🏾) 1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, light skin tone # E12.0 [1] (👩🏿‍🤝‍👨🏻) 1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium-light skin tone #E12.0[1] (👩🏿‍🤝‍👨🏼) 1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium skin tone # E12.0 [1] (👩🏿‍🤝‍👨🏽) @@ -268,6 +344,10 @@ 1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏼) 1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏽) 1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏾) +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women wrestling: dark skin tone, light skin tone # E17.0 [1] (👩🏿‍🫯‍👩🏻) +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women wrestling: dark skin tone, medium-light skin tone # E17.0 [1] (👩🏿‍🫯‍👩🏼) +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women wrestling: dark skin tone, medium skin tone # E17.0 [1] (👩🏿‍🫯‍👩🏽) +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women wrestling: dark skin tone, medium-dark skin tone # E17.0 [1] (👩🏿‍🫯‍👩🏾) 1F9D1 200D 1F91D 200D 1F9D1 ; RGI_Emoji_ZWJ_Sequence ; people holding hands # E12.0 [1] (🧑‍🤝‍🧑) 1F9D1 200D 1F9D1 200D 1F9D2 ; RGI_Emoji_ZWJ_Sequence ; family: adult, adult, child # E15.1 [1] (🧑‍🧑‍🧒) 1F9D1 200D 1F9D1 200D 1F9D2 200D 1F9D2 ; RGI_Emoji_ZWJ_Sequence ; family: adult, adult, child, child # E15.1 [1] (🧑‍🧑‍🧒‍🧒) @@ -359,7 +439,7 @@ 1FAF1 1F3FF 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium skin tone # E14.0 [1] (🫱🏿‍🫲🏽) 1FAF1 1F3FF 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium-dark skin tone # E14.0 [1] (🫱🏿‍🫲🏾) -# Total elements: 331 +# Total elements: 411 # ================================================ @@ -908,6 +988,16 @@ 1F46E 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: dark skin tone # E4.0 [1] (👮🏿‍♂️) 1F46F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears # E4.0 [1] (👯‍♀️) 1F46F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears # E4.0 [1] (👯‍♂️) +1F46F 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: light skin tone # E17.0 [1] (👯🏻‍♀️) +1F46F 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: light skin tone # E17.0 [1] (👯🏻‍♂️) +1F46F 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-light skin tone # E17.0 [1] (👯🏼‍♀️) +1F46F 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-light skin tone # E17.0 [1] (👯🏼‍♂️) +1F46F 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium skin tone # E17.0 [1] (👯🏽‍♀️) +1F46F 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium skin tone # E17.0 [1] (👯🏽‍♂️) +1F46F 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: medium-dark skin tone # E17.0 [1] (👯🏾‍♀️) +1F46F 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: medium-dark skin tone # E17.0 [1] (👯🏾‍♂️) +1F46F 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears: dark skin tone # E17.0 [1] (👯🏿‍♀️) +1F46F 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears: dark skin tone # E17.0 [1] (👯🏿‍♂️) 1F470 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil # E13.0 [1] (👰‍♀️) 1F470 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil # E13.0 [1] (👰‍♂️) 1F470 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: light skin tone # E13.0 [1] (👰🏻‍♀️) @@ -1210,6 +1300,16 @@ 1F939 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: dark skin tone # E4.0 [1] (🤹🏿‍♂️) 1F93C 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling # E4.0 [1] (🤼‍♀️) 1F93C 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling # E4.0 [1] (🤼‍♂️) +1F93C 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling: light skin tone # E17.0 [1] (🤼🏻‍♀️) +1F93C 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling: light skin tone # E17.0 [1] (🤼🏻‍♂️) +1F93C 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-light skin tone # E17.0 [1] (🤼🏼‍♀️) +1F93C 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-light skin tone # E17.0 [1] (🤼🏼‍♂️) +1F93C 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium skin tone # E17.0 [1] (🤼🏽‍♀️) +1F93C 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium skin tone # E17.0 [1] (🤼🏽‍♂️) +1F93C 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling: medium-dark skin tone # E17.0 [1] (🤼🏾‍♀️) +1F93C 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling: medium-dark skin tone # E17.0 [1] (🤼🏾‍♂️) +1F93C 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling: dark skin tone # E17.0 [1] (🤼🏿‍♀️) +1F93C 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling: dark skin tone # E17.0 [1] (🤼🏿‍♂️) 1F93D 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo # E4.0 [1] (🤽‍♀️) 1F93D 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo # E4.0 [1] (🤽‍♂️) 1F93D 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: light skin tone # E4.0 [1] (🤽🏻‍♀️) @@ -1419,7 +1519,7 @@ 1F9DF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman zombie # E5.0 [1] (🧟‍♀️) 1F9DF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man zombie # E5.0 [1] (🧟‍♂️) -# Total elements: 608 +# Total elements: 628 # ================================================ @@ -1523,7 +1623,53 @@ 1F636 200D 1F32B FE0F ; RGI_Emoji_ZWJ_Sequence ; face in clouds # E13.1 [1] (😶‍🌫️) 1F642 200D 2194 FE0F ; RGI_Emoji_ZWJ_Sequence ; head shaking horizontally # E15.1 [1] (🙂‍↔️) 1F642 200D 2195 FE0F ; RGI_Emoji_ZWJ_Sequence ; head shaking vertically # E15.1 [1] (🙂‍↕️) +1F9D1 200D 1FA70 ; RGI_Emoji_ZWJ_Sequence ; ballet dancer # E17.0 [1] (🧑‍🩰) +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: light skin tone, medium-light skin tone #E17.0 [1] (🧑🏻‍🐰‍🧑🏼) +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: light skin tone, medium skin tone # E17.0 [1] (🧑🏻‍🐰‍🧑🏽) +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: light skin tone, medium-dark skin tone # E17.0 [1] (🧑🏻‍🐰‍🧑🏾) +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: light skin tone, dark skin tone # E17.0 [1] (🧑🏻‍🐰‍🧑🏿) +1F9D1 1F3FB 200D 1FA70 ; RGI_Emoji_ZWJ_Sequence ; ballet dancer: light skin tone # E17.0 [1] (🧑🏻‍🩰) +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people wrestling: light skin tone, medium-light skin tone # E17.0 [1] (🧑🏻‍🫯‍🧑🏼) +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people wrestling: light skin tone, medium skin tone # E17.0 [1] (🧑🏻‍🫯‍🧑🏽) +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people wrestling: light skin tone, medium-dark skin tone # E17.0 [1] (🧑🏻‍🫯‍🧑🏾) +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people wrestling: light skin tone, dark skin tone # E17.0 [1] (🧑🏻‍🫯‍🧑🏿) +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-light skin tone, light skin tone #E17.0 [1] (🧑🏼‍🐰‍🧑🏻) +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-light skin tone, medium skin tone #E17.0 [1] (🧑🏼‍🐰‍🧑🏽) +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-light skin tone, medium-dark skin tone #E17.0[1] (🧑🏼‍🐰‍🧑🏾) +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-light skin tone, dark skin tone # E17.0 [1] (🧑🏼‍🐰‍🧑🏿) +1F9D1 1F3FC 200D 1FA70 ; RGI_Emoji_ZWJ_Sequence ; ballet dancer: medium-light skin tone # E17.0 [1] (🧑🏼‍🩰) +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-light skin tone, light skin tone # E17.0 [1] (🧑🏼‍🫯‍🧑🏻) +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-light skin tone, medium skin tone # E17.0 [1] (🧑🏼‍🫯‍🧑🏽) +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-light skin tone, medium-dark skin tone #E17.0 [1] (🧑🏼‍🫯‍🧑🏾) +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-light skin tone, dark skin tone # E17.0 [1] (🧑🏼‍🫯‍🧑🏿) +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium skin tone, light skin tone # E17.0 [1] (🧑🏽‍🐰‍🧑🏻) +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium skin tone, medium-light skin tone #E17.0 [1] (🧑🏽‍🐰‍🧑🏼) +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium skin tone, medium-dark skin tone #E17.0 [1] (🧑🏽‍🐰‍🧑🏾) +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium skin tone, dark skin tone # E17.0 [1] (🧑🏽‍🐰‍🧑🏿) +1F9D1 1F3FD 200D 1FA70 ; RGI_Emoji_ZWJ_Sequence ; ballet dancer: medium skin tone # E17.0 [1] (🧑🏽‍🩰) +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium skin tone, light skin tone # E17.0 [1] (🧑🏽‍🫯‍🧑🏻) +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium skin tone, medium-light skin tone # E17.0 [1] (🧑🏽‍🫯‍🧑🏼) +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium skin tone, medium-dark skin tone # E17.0 [1] (🧑🏽‍🫯‍🧑🏾) +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium skin tone, dark skin tone # E17.0 [1] (🧑🏽‍🫯‍🧑🏿) +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-dark skin tone, light skin tone # E17.0 [1] (🧑🏾‍🐰‍🧑🏻) +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-dark skin tone, medium-light skin tone #E17.0[1] (🧑🏾‍🐰‍🧑🏼) +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-dark skin tone, medium skin tone #E17.0 [1] (🧑🏾‍🐰‍🧑🏽) +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: medium-dark skin tone, dark skin tone # E17.0 [1] (🧑🏾‍🐰‍🧑🏿) +1F9D1 1F3FE 200D 1FA70 ; RGI_Emoji_ZWJ_Sequence ; ballet dancer: medium-dark skin tone # E17.0 [1] (🧑🏾‍🩰) +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-dark skin tone, light skin tone # E17.0 [1] (🧑🏾‍🫯‍🧑🏻) +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-dark skin tone, medium-light skin tone #E17.0 [1] (🧑🏾‍🫯‍🧑🏼) +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-dark skin tone, medium skin tone # E17.0 [1] (🧑🏾‍🫯‍🧑🏽) +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people wrestling: medium-dark skin tone, dark skin tone # E17.0 [1] (🧑🏾‍🫯‍🧑🏿) +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: dark skin tone, light skin tone # E17.0 [1] (🧑🏿‍🐰‍🧑🏻) +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: dark skin tone, medium-light skin tone # E17.0 [1] (🧑🏿‍🐰‍🧑🏼) +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: dark skin tone, medium skin tone # E17.0 [1] (🧑🏿‍🐰‍🧑🏽) +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people with bunny ears: dark skin tone, medium-dark skin tone # E17.0 [1] (🧑🏿‍🐰‍🧑🏾) +1F9D1 1F3FF 200D 1FA70 ; RGI_Emoji_ZWJ_Sequence ; ballet dancer: dark skin tone # E17.0 [1] (🧑🏿‍🩰) +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people wrestling: dark skin tone, light skin tone # E17.0 [1] (🧑🏿‍🫯‍🧑🏻) +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people wrestling: dark skin tone, medium-light skin tone # E17.0 [1] (🧑🏿‍🫯‍🧑🏼) +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people wrestling: dark skin tone, medium skin tone # E17.0 [1] (🧑🏿‍🫯‍🧑🏽) +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people wrestling: dark skin tone, medium-dark skin tone # E17.0 [1] (🧑🏿‍🫯‍🧑🏾) -# Total elements: 19 +# Total elements: 65 #EOF diff --git a/etc/NEWS b/etc/NEWS index 4dc77f0e127..c410843f8f0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -71,6 +71,8 @@ done from early-init.el, such as adding to 'package-directory-list'. * Changes in Emacs 31.1 +** Emacs now supports Unicode Standard version 17.0. + ** 'prettify-symbols-mode' attempts to ignore undisplayable characters. Previously, such characters would be rendered as, e.g., white boxes. diff --git a/lisp/international/characters.el b/lisp/international/characters.el index 1697c9af752..6a9f957b150 100644 --- a/lisp/international/characters.el +++ b/lisp/international/characters.el @@ -1304,7 +1304,7 @@ with L, LRE, or LRO Unicode bidi character type.") (#x2648 . #x2653) (#x267F . #x267F) (#x268A . #x268F) - (#x2693 . #x2693) + (#x2690 . #x2693) (#x26A1 . #x26A1) (#x26AA . #x26AB) (#x26BD . #x26BE) @@ -1341,6 +1341,7 @@ with L, LRE, or LRO Unicode bidi character type.") (#x31EF . #x31EF) (#x31F0 . #x3247) (#x3250 . #x4DBF) + (#x4DC0 . #x4DFF) (#x4E00 . #xA48C) (#xA490 . #xA4C6) (#xA960 . #xA97C) @@ -1351,12 +1352,13 @@ with L, LRE, or LRO Unicode bidi character type.") (#xFF01 . #xFF60) (#xFFE0 . #xFFE6) (#x16FE0 . #x16FE4) - (#x16FF0 . #x16FF1) + (#x16FF0 . #x16FF6) (#x17000 . #x187F7) (#x18800 . #x18AFF) (#x18B00 . #x18CD5) (#x18CFF . #x18CFF) - (#x18D00 . #x18D08) + (#x18D00 . #x18D1E) + (#x18D80 . #x18DF2) (#x1AFF0 . #x1AFF3) (#x1AFF5 . #x1AFFB) (#x1AFFD . #x1AFFE) @@ -1402,7 +1404,7 @@ with L, LRE, or LRO Unicode bidi character type.") (#x1F680 . #x1F6C5) (#x1F6CC . #x1F6CC) (#x1F6D0 . #x1F6D2) - (#x1F6D5 . #x1F6D7) + (#x1F6D5 . #x1F6D8) (#x1F6DC . #x1F6DF) (#x1F6EB . #x1F6EC) (#x1F6F4 . #x1F6FC) @@ -1413,13 +1415,13 @@ with L, LRE, or LRO Unicode bidi character type.") (#x1F947 . #x1F9FF) (#x1FA00 . #x1FA53) (#x1FA60 . #x1FA6D) - (#x1FA70 . #x1FA74) - (#x1FA78 . #x1FA7C) - (#x1FA80 . #x1FA89) - (#x1FA8F . #x1FAC6) - (#x1FACE . #x1FADC) - (#x1FADF . #x1FAE9) - (#x1FAF0 . #x1FAF8) + (#x1FA70 . #x1FA7C) + (#x1FA80 . #x1FA8A) + (#x1FA8E . #x1FAC6) + (#x1FAC8 . #x1FAC8) + (#x1FACD . #x1FADC) + (#x1FADF . #x1FAEA) + (#x1FAEF . #x1FAF8) (#x1FB00 . #x1FB92) (#x20000 . #x2FFFF) (#x30000 . #x3FFFF)))) diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index 083c3b1ad3c..03b92b6b34c 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el @@ -242,6 +242,7 @@ (nabataean #x10880) (phoenician #x10900) (lydian #x10920) + (sidetic #x10940) (kharoshthi #x10A00) (manichaean #x10AC0) (avestan #x10B00) @@ -280,6 +281,7 @@ (marchen #x11C72) (masaram-gondi #x11D00) (gunjala-gondi #x11D60) + (tolong-siki #x11DB0) (makasar #x11EE0 #x11EF7) (kawi #x11F04 #x11F41 #x11F4F) (cuneiform #x12000) @@ -292,6 +294,7 @@ (pahawh-hmong #x16B11) (kirat-rai #x16D43 #x16D63 #x16D71) (medefaidrin #x16E40) + (beria-erfe #x16EA0) (tangut #x17000) (khitan-small-script #x18B00) (nushu #x1B170) @@ -308,6 +311,7 @@ (wancho #x1E2C0 #x1E2E8 #x1E2EF) (nag-mundari #x1E4D0 #x1E4EB #x1E4F0) (ol-onal #x1E5D0 #x1E5F2) + (tai-yo #x1E6E0) (mende-kikakui #x1E810 #x1E8A6) (adlam #x1E900 #x1E943) (indic-siyaq-number #x1EC71 #x1EC9F) @@ -335,6 +339,7 @@ (batk . batak) (bng2 . bengali) (beng . bengali) + (berf . beria-erfe) (bhks . bhaiksuki) (bopo . bopomofo) (brah . brahmi) @@ -467,6 +472,7 @@ (shrd . sharada) (shaw . shavian) (sidd . siddham) + (sidt . sidetic) (sgnw . sutton-sign-writing) (sinh . sinhala) (sogd . sogdian) @@ -487,6 +493,7 @@ (tml2 . tamil) (tnsa . tangsa) (tang . tangut) + (tayo . tai-yo) (telu . telugu) (tel2 . telugu) (thaa . thaana) @@ -495,6 +502,7 @@ (tfng . tifinagh) (tirh . tirhuta) (todr . todhri) + (tols . tolong-siki) (toto . toto) (tutg . tulu-tigalari) (ugar . ugaritic) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index b1ff5922c90..f75ee2f0f3f 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -3109,8 +3109,8 @@ on encoding." ;; (#x17000 . #x187FF) Tangut Ideographs ;; (#x18800 . #x18AFF) Tangut Components ;; (#x18B00 . #x18CFF) Khitan Small Script - ;; (#x18D00 . #x18D0F) Tangut Ideograph Supplement - ;; (#x18D10 . #x1AFEF) unused + ;; (#x18D00 . #x18D1E) Tangut Ideograph Supplement + ;; (#x18D80 . #x18DFF) Tangut Components (#x1AFF0 . #x1B122) ;; (#x1B123 . #x1B131) unused (#x1B132 . #x1B132) diff --git a/test/lisp/international/ucs-normalize-tests.el b/test/lisp/international/ucs-normalize-tests.el index d0a0635dfbe..ddc99afeaae 100644 --- a/test/lisp/international/ucs-normalize-tests.el +++ b/test/lisp/international/ucs-normalize-tests.el @@ -184,7 +184,7 @@ Must be called with `ucs-normalize-tests--norm-buf' as current buffer." (should-not (ucs-normalize-tests--rule1-failing-for-partX 0))) (defconst ucs-normalize-tests--failing-lines-part1 - (list )) + (list 2432)) ;; Keep a record of failures, for consulting afterwards (the ert ;; backtrace only shows a truncated version of these lists). @@ -247,19 +247,23 @@ Must be called with `ucs-normalize-tests--norm-buf' as current buffer." ucs-normalize-tests--failing-lines-part1))) (defconst ucs-normalize-tests--failing-lines-part2 - (list 17867 17868 17879 17880 17885 17886 17889 17890 - 17893 17894 17899 17900 17907 17908 17985 17986 - 18101 18102 18127 18128 18133 18134 18537 18538 - 18693 18694 18705 18706 18709 18710 18713 18714 - 18715 18716 18719 18720 18721 18722 18757 18758 - 18763 18764 18767 18768 18773 18774 18779 18780 - 18785 18786 18789 18791 18793 18795 18797 18798 - 18799 18801 18803 18805 18807 18835 18836 18837 - 18838 18839 18985 18987 18989 18991 18993 18995 - 18997 18999 19001 19003 19005 19007 19009 19010 - 19011 19012 19013 19015 19017 19019 19021 19023 - 19025 19027 19029 19031 19033 19035 19037 19039 - 19041 19043 19045 19047 19048)) + (list 17868 17869 17880 17881 17886 17887 17890 17891 + 17894 17895 17900 17901 17908 17909 17986 17987 + 18102 18104 18106 18108 18110 18112 18114 18116 + 18118 18120 18122 18124 18126 18128 18130 18132 + 18134 18136 18138 18140 18142 18144 18146 18148 + 18150 18152 18154 18156 18157 18182 18183 18188 + 18189 18592 18593 18704 18706 18752 18753 18764 + 18765 18768 18769 18772 18773 18774 18775 18778 + 18779 18780 18781 18816 18817 18822 18823 18826 + 18827 18832 18833 18838 18839 18844 18845 18848 + 18850 18852 18854 18856 18857 18858 18860 18862 + 18864 18866 18894 18895 18896 18897 18898 19044 + 19046 19048 19050 19052 19054 19056 19058 19060 + 19062 19064 19066 19068 19069 19070 19071 19072 + 19074 19076 19078 19080 19082 19084 19086 19088 + 19090 19092 19094 19096 19098 19100 19102 19104 + 19106 19108 19110 19112 19114 19116 19117)) (ert-deftest ucs-normalize-part2 () :tags '(:expensive-test) diff --git a/test/manual/BidiCharacterTest.txt b/test/manual/BidiCharacterTest.txt index 304b6ca4670..509f6d408dc 100644 --- a/test/manual/BidiCharacterTest.txt +++ b/test/manual/BidiCharacterTest.txt @@ -1,6 +1,6 @@ -# BidiCharacterTest-16.0.0.txt -# Date: 2024-02-02 -# © 2024 Unicode®, Inc. +# BidiCharacterTest-17.0.0.txt +# Date: 2025-07-30 +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -39,7 +39,8 @@ ################################################################################ # Examples from UAX #9 -# Examples from Section 3.3.5 +# Examples from the "Resolving Neutral and Isolate Formatting Types" section of UAX #9 +# (https://www.unicode.org/reports/tr9/#Resolving_Neutral_Types) 05D0 05D1 0028 05D2 05D3 005B 0026 0065 0066 005D 002E 0029 0067 0068;0;0;1 1 0 1 1 0 0 0 0 0 0 0 0 0;1 0 2 4 3 5 6 7 8 9 10 11 12 13 05D0 05D1 0028 05D2 05D3 005B 0026 0065 0066 005D 002E 0029 0067 0068;1;1;1 1 1 1 1 1 1 2 2 1 1 1 2 2;12 13 11 10 9 7 8 6 5 4 3 2 1 0 0061 0062 0063 0020 0028 0064 0065 0066 0020 0627 0628 062C 0029 0020 05D0 05D1 05D2;0;0;0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1;0 1 2 3 4 5 6 7 8 11 10 9 12 13 16 15 14 commit 569fa594e24e288f3d3ba4d9042bb85f8c4f348f Author: Stefan Monnier Date: Thu Sep 11 12:26:47 2025 +0200 Rearrange tramp.el in order to avoid bootstrap problems * lisp/net/tramp.el (tramp-compat, tramp-message) (tramp-integration, trampver): Require them later. (top): Use `eval-and-compile' modifying `macro-declarations-alist'. (tramp-register-file-name-handlers): Don't fail during bootstrap before `tramp-loaddefs.el' is built. diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 9bf1b4ae6c3..ad768f9e038 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -63,11 +63,6 @@ ;;; Code: -(require 'tramp-compat) -(require 'tramp-message) -(require 'tramp-integration) -(require 'trampver) - ;; Pacify byte-compiler. (require 'cl-lib) (declare-function file-notify-rm-watch "filenotify") @@ -106,8 +101,9 @@ ;; TODO: Once (autoload-macro expand) is available in all supported ;; Emacs versions (Emacs 31.1+), this can be eliminated: ;; Backward compatibility for autoload-macro declare form. - (unless (assq 'autoload-macro macro-declarations-alist) - (push '(autoload-macro ignore) macro-declarations-alist)) + (eval-and-compile + (unless (assq 'autoload-macro macro-declarations-alist) + (push '(autoload-macro ignore) macro-declarations-alist))) (defmacro tramp--with-startup (&rest body) "Schedule BODY to be executed at the end of tramp.el." @@ -124,6 +120,11 @@ 'defun-declarations-alist (list 'tramp-suppress-trace #'tramp-byte-run--set-suppress-trace)))) +(require 'tramp-compat) +(require 'tramp-message) +(require 'tramp-integration) +(require 'trampver) + ;;; User Customizable Internal Variables: (defgroup tramp nil @@ -2760,7 +2761,9 @@ remote file names." (cons tramp-file-name-regexp #'tramp-file-name-handler)) (put #'tramp-file-name-handler 'safe-magic t) - (tramp-register-crypt-file-name-handler) + ;; Don't fail during bootstrap before `tramp-loaddefs.el' is built. + (when (fboundp 'tramp-register-crypt-file-name-handler) + (tramp-register-crypt-file-name-handler)) (add-to-list 'file-name-handler-alist (cons tramp-completion-file-name-regexp @@ -2771,7 +2774,9 @@ remote file names." (mapcar #'car tramp-completion-file-name-handler-alist)) ;; After unloading, `tramp-archive-enabled' might not be defined. - (when (bound-and-true-p tramp-archive-enabled) + (when (and (bound-and-true-p tramp-archive-enabled) + ;; Don't burp during boostrap when `tramp-loaddefs.el' isn't built. + (boundp 'tramp-archive-file-name-regexp)) (add-to-list 'file-name-handler-alist (cons tramp-archive-file-name-regexp #'tramp-archive-file-name-handler)) commit 2954234f8ff227fe276b88d759b1e247ca811c8c Author: Stefan Monnier Date: Wed Sep 10 19:05:15 2025 -0400 (scheme-mode-variables): Fix bug#79282 * lisp/progmodes/scheme.el (scheme-mode-variables): Re-install `lisp-font-lock-syntactic-face-function` mistakenly removed in commit 0a5cfeeecb9e. diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el index 6fa92164f43..0aea4c20cdd 100644 --- a/lisp/progmodes/scheme.el +++ b/lisp/progmodes/scheme.el @@ -201,7 +201,9 @@ scheme-font-lock-keywords-1 scheme-font-lock-keywords-2) nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14")) beginning-of-defun - (font-lock-mark-block-function . mark-defun))) + (font-lock-mark-block-function . mark-defun) + (font-lock-syntactic-face-function + . lisp-font-lock-syntactic-face-function))) (setq-local prettify-symbols-alist lisp-prettify-symbols-alist) (setq-local lisp-doc-string-elt-property 'scheme-doc-string-elt)) commit d859ac4183cb511e4d781e963cc47bf3636cc763 Author: Mattias Engdegård Date: Wed Sep 10 14:35:48 2025 +0200 Make bytecomp-tests cease warn and error to stdout They were caused by compilation errors going to 'display-warning' which prints a duplicate of the message to stdout when running noninteractively. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--log-warning-for-byte-compile) (bytecomp-tests--with-warnings): New. Wrap around compilation calls in this file. diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index 5d95e9b0ee7..7cbfd97d653 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -32,6 +32,28 @@ (require 'bytecomp) ;;; Code: + +;; Replacement for `byte-compile--log-warning-for-byte-compile' +;; that doesn't call `display-warning' to avoid warnings being printed +;; to the test log when running noninteractively. +(defun bytecomp-tests--log-warning-for-byte-compile (string _pos _fill level) + (with-current-buffer (get-buffer-create byte-compile-log-buffer) + (save-excursion + (goto-char (point-max)) + (let ((inhibit-read-only t)) + (byte-compile-warning-prefix level nil) + (insert + (format "%s%s\n" + (cond ((eq level :warning) "Warning: ") + ((eq level :error) "Error: ")) + string)))))) + +(defmacro bytecomp-tests--with-warnings (&rest body) + "Run BODY, compiler warnings going to `byte-compile-log-buffer' only." + `(cl-letf (((symbol-function 'byte-compile--log-warning-for-byte-compile) + #'bytecomp-tests--log-warning-for-byte-compile)) + ,@body)) + (defvar bytecomp-test-var nil) (defun bytecomp-test-get-var () @@ -820,7 +842,8 @@ These are only tested with lexical binding.") "Evaluate FORM using the Lisp interpreter, returning errors as a special value." (condition-case err - (eval form lexical-binding) + (let ((inhibit-message t)) + (eval form lexical-binding)) (error (list 'bytecomp-check-error (car err))))) (defun bytecomp-tests--eval-compiled (form) @@ -828,9 +851,10 @@ special value." special value." (let ((warning-minimum-log-level :emergency) (byte-compile-warnings nil)) - (condition-case err - (funcall (byte-compile (list 'lambda nil form))) - (error (list 'bytecomp-check-error (car err)))))) + (condition-case err + (funcall (bytecomp-tests--with-warnings + (byte-compile (list 'lambda nil form)))) + (error (list 'bytecomp-check-error (car err)))))) (ert-deftest bytecomp-tests-lexbind () "Check that various expressions behave the same when interpreted and @@ -861,7 +885,8 @@ byte-compiled. Run with dynamic binding." (s-comp (byte-compile s-int)) (v-int (lambda (x) (1+ x))) (v-comp (byte-compile v-int)) - (comp (lambda (f) (funcall (byte-compile `(lambda () (,f 3))))))) + (bc (lambda (f) (bytecomp-tests--with-warnings (byte-compile f)))) + (comp (lambda (f) (funcall (funcall bc `(lambda () (,f 3))))))) (should (equal (funcall comp s-int) 4)) (should (equal (funcall comp s-comp) 4)) (should (equal (funcall comp v-int) 4)) @@ -870,7 +895,8 @@ byte-compiled. Run with dynamic binding." (defmacro bytecomp-tests--with-fresh-warnings (&rest body) `(let ((macroexp--warned ; oh dear (make-hash-table :test #'equal :weakness 'key))) - ,@body)) + (bytecomp-tests--with-warnings + ,@body))) (defun test-byte-comp-compile-and-load (compile &rest forms) (declare (indent 1)) @@ -1093,7 +1119,8 @@ byte-compiled. Run with dynamic binding." `(ert-deftest ,(intern (format "bytecomp/%s" file)) () (with-current-buffer (get-buffer-create "*Compile-Log*") (let ((inhibit-read-only t)) (erase-buffer)) - (byte-compile-file ,(ert-resource-file file)) + (bytecomp-tests--with-warnings + (byte-compile-file ,(ert-resource-file file))) (ert-info ((buffer-string) :prefix "buffer: ") (,(if reverse 'should-not 'should) (re-search-forward ,re-warning nil t)))))) @@ -1342,7 +1369,8 @@ byte-compiled. Run with dynamic binding." nil elfile) (let* ((byte-compile-debug t) (byte-compile-dest-file-function #'ignore)) - (byte-compile-file elfile) + (bytecomp-tests--with-warnings + (byte-compile-file elfile)) (should (equal (funcall 'def) 5))))) (defmacro bytecomp-tests--with-temp-file (file-name-var &rest body) @@ -1362,7 +1390,8 @@ byte-compiled. Run with dynamic binding." (let ((inhibit-read-only t)) (erase-buffer))) (bytecomp-tests--with-temp-file el-file (write-region source nil el-file) - (byte-compile-file el-file)) + (bytecomp-tests--with-warnings + (byte-compile-file el-file))) (with-current-buffer byte-compile-log-buffer (buffer-string)))) @@ -1476,7 +1505,8 @@ literals (Bug#20852)." (or (featurep 'emacs) (some-undefined-function-or))) ") - (byte-compile-from-buffer (current-buffer))) + (bytecomp-tests--with-warnings + (byte-compile-from-buffer (current-buffer)))) (with-current-buffer byte-compile-log-buffer (should (search-forward "an-undefined-function" nil t)) (should-not (search-forward "some-undefined-function" nil t)))) @@ -1549,9 +1579,10 @@ literals (Bug#20852)." (goto-char (point-min)) (should-not (string-match match (buffer-string)))) ;; Also check that byte compiled forms are identical. - (should (equal (byte-compile form) - (byte-compile - `(with-suppressed-warnings ,suppress ,form)))))) + (let ((normal (bytecomp-tests--with-warnings (byte-compile form))) + (nowarn (bytecomp-tests--with-warnings + (byte-compile `(with-suppressed-warnings ,suppress ,form))))) + (should (equal normal nowarn))))) (ert-deftest bytecomp-test--with-suppressed-warnings () (test-suppression @@ -1869,7 +1900,10 @@ compiled correctly." (ert-deftest bytecomp-string-vs-docstring () ;; Don't confuse a string return value for a docstring. (let ((lexical-binding t)) - (should (equal (funcall (byte-compile '(lambda (x) "foo")) 'dummy) "foo")))) + (should (equal (funcall (bytecomp-tests--with-warnings + (byte-compile '(lambda (x) "foo"))) + 'dummy) + "foo")))) (ert-deftest bytecomp-condition-case-success () ;; No error, no success handler. @@ -2100,7 +2134,8 @@ EXPECTED-POINT BINDINGS (MODES \\='\\='(ruby-mode js-mode python-mode)) \ (with-current-buffer (get-buffer-create "*Compile-Log*") (let ((inhibit-read-only t)) (erase-buffer)) - (byte-compile-file el) + (bytecomp-tests--with-warnings + (byte-compile-file el)) (let ((expected '("70:4: Warning: `declare' after `interactive'" "74:4: Warning: Doc string after `interactive'" commit f4d0a2560af6bff9793f53c2e06d4fcd3480be9a Author: Mattias Engdegård Date: Tue Sep 9 19:00:51 2025 +0200 Remove unused and broken source inline code path * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand): We can assume that non-compiled functions are from another file at this point and remove an unused code branch which didn't actually work with interpreted function objects anyway. diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index bc3677529e5..0560640952f 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -169,32 +169,28 @@ Earlier variables shadow later ones with the same name.") ;; letbind byte-code (or any other combination for that matter), we ;; can only inline dynbind source into dynbind source or lexbind ;; source into lexbind source. - ;; When the function comes from another file, we byte-compile + ;; We assume that the function comes from another file (it would + ;; have already been compiled otherwise) and byte-compile ;; the inlined function first, and then inline its byte-code. ;; This also has the advantage that the final code does not ;; depend on the order of compilation of Elisp files, making ;; the build more reproducible. - (if (eq fn localfn) - ;; From the same file => same mode. - (let* ((newform `(,fn ,@(cdr form))) - (unfolded (macroexp--unfold-lambda newform))) - ;; Use the newform only if it could be optimized. - (if (eq unfolded newform) form unfolded)) - ;; Since we are called from inside the optimizer, we need to make - ;; sure not to propagate lexvar values. - (let ((byte-optimize--lexvars nil) - ;; Silence all compilation warnings: the useful ones should - ;; be displayed when the function's source file will be - ;; compiled anyway, but more importantly we would otherwise - ;; emit spurious warnings here because we don't have the full - ;; context, such as `declare-function's placed earlier in the - ;; source file's code or `with-suppressed-warnings' that - ;; surrounded the `defsubst'. - (byte-compile-warnings nil)) - (byte-compile name)) - (let ((bc (symbol-function name))) - (byte-compile--check-arity-bytecode form bc) - `(,bc ,@(cdr form))))) + + ;; Since we are called from inside the optimizer, we need to make + ;; sure not to propagate lexvar values. + (let ((byte-optimize--lexvars nil) + ;; Silence all compilation warnings: the useful ones should + ;; be displayed when the function's source file will be + ;; compiled anyway, but more importantly we would otherwise + ;; emit spurious warnings here because we don't have the full + ;; context, such as `declare-function's placed earlier in the + ;; source file's code or `with-suppressed-warnings' that + ;; surrounded the `defsubst'. + (byte-compile-warnings nil)) + (byte-compile name)) + (let ((bc (symbol-function name))) + (byte-compile--check-arity-bytecode form bc) + `(,bc ,@(cdr form)))) (_ ;; Give up on inlining. form)))) commit 014036980e9d98ce7c2b8d75762fb6a60ca61329 Author: Stefan Monnier Date: Wed Sep 10 11:13:45 2025 +0200 ; * lisp/net/tramp-compat.el (top): Use read syntax #' for `functionp'. diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index feda8943be5..5d463bc0062 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -229,7 +229,7 @@ value is the default binding of the variable." (cdr result) ,variable))))) -(dolist (elt (all-completions "tramp-compat-" obarray 'functionp)) +(dolist (elt (all-completions "tramp-compat-" obarray #'functionp)) (function-put (intern elt) 'tramp-suppress-trace t)) (add-hook 'tramp-unload-hook commit a060bdec820b2ec20d62b77df6d55b54b91cd81b Author: Dmitry Gutov Date: Wed Sep 10 01:54:36 2025 +0300 Better 'project-buffer' completion category defaults in Emacs <= 30 * lisp/progmodes/project.el: Fall back to adding 'project-buffer' to 'completion-category-defaults' if 'define-completion-category' is not available (bug#79409). diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index c15148110a6..cb018a870a6 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -1718,9 +1718,11 @@ Return non-nil if PROJECT is not a remote project." (t (complete-with-action action buffers string pred))))) -(when (fboundp 'define-completion-category) ; Introduced in Emacs 31. - (define-completion-category 'project-buffer '(buffer) - "Completion category for buffers in a given project.")) +(if (fboundp 'define-completion-category) ; Introduced in Emacs 31. + (define-completion-category 'project-buffer '(buffer) + "Completion category for buffers in a given project.") + (add-to-list 'completion-category-defaults + '(project-buffer (styles . (basic substring))))) (defun project--read-project-buffer () (let* ((pr (project-current t)) commit 0e9cee2bf5d97a23c47d99ffc47396dcd3bd50ee Author: Spencer Baugh Date: Thu Aug 28 14:13:24 2025 -0400 Ignore keymaps at point for positions outside the buffer Correct a few edge cases where we used the keymaps at point when looking up keymaps for an event position which is outside the current buffer. Namely: - Clicking on a part of the mode line which is after the end of mode-line-format produces an event with non-nil posn-area but nil posn-string. - Even if posn-string doesn't have a local keymap, we should still ignore the keymaps at point if posn-string is non-nil. * src/keymap.c (Fcurrent_active_maps): Ignore keymaps at point for more positions outside the buffer. (bug#76620) diff --git a/src/keymap.c b/src/keymap.c index 2c250578b00..295b209f06b 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -1735,11 +1735,20 @@ means to return the active maps for that window's buffer. */) } } - /* If on a mode line string with a local keymap, - or for a click on a string, i.e. overlay string or a - string displayed via the `display' property, - consider `local-map' and `keymap' properties of - that string. */ + Lisp_Object pos_area = POSN_POSN (position); + if (EQ (pos_area, Qmode_line) || EQ (pos_area, Qheader_line)) + { + /* For clicks on mode line or header line, ignore the maps + we found at POSITION, because properties at point are + not relevant in that case. */ + local_map = Qnil; + keymap = Qnil; + } + + /* If on a mode line string with a local keymap, or for a + click on a string, i.e. overlay string or a string + displayed via the `display' property, consider only the + `local-map' and `keymap' properties of that string. */ if (CONSP (string) && STRINGP (XCAR (string))) { @@ -1749,23 +1758,8 @@ means to return the active maps for that window's buffer. */) && XFIXNUM (pos) >= 0 && XFIXNUM (pos) < SCHARS (string)) { - Lisp_Object map = Fget_text_property (pos, Qlocal_map, - string); - Lisp_Object pos_area = POSN_POSN (position); - /* For clicks on mode line or header line, override - the maps we found at POSITION unconditionally, even - if the corresponding properties of the mode- or - header-line string are nil, because propertries at - point are not relevant in that case. */ - if (!NILP (map) - || EQ (pos_area, Qmode_line) - || EQ (pos_area, Qheader_line)) - local_map = map; - map = Fget_text_property (pos, Qkeymap, string); - if (!NILP (map) - || EQ (pos_area, Qmode_line) - || EQ (pos_area, Qheader_line)) - keymap = map; + local_map = Fget_text_property (pos, Qlocal_map, string); + keymap = Fget_text_property (pos, Qkeymap, string); } } diff --git a/test/src/keymap-tests.el b/test/src/keymap-tests.el index c605c3eb09d..950c741a6dd 100644 --- a/test/src/keymap-tests.el +++ b/test/src/keymap-tests.el @@ -509,6 +509,33 @@ g .. h foo ;; From the parent this time/ (should (equal (keymap-lookup map "u") #'undo)))) +(defun keymap-test--maps-for-posn (area string) + (current-active-maps + nil + ;; FIXME: This test would be better if this was a real position + ;; created by a real click. + `(,(selected-window) ,area (1 . 1) 0 (,string . 0) nil (1 . 1) nil (1 . 1) (1 . 1)))) + +(ert-deftest keymap-test-keymaps-for-non-buffer-positions () + "`current-active-maps' with non-buffer positions. (bug#76620)" + (with-temp-buffer + (pop-to-buffer (current-buffer)) + (let ((keymap (make-sparse-keymap "keymap-at-point"))) + (insert (propertize "string" 'keymap keymap)) + (goto-char (point-min)) + (should (memq keymap (current-active-maps))) + (should-not (memq keymap (keymap-test--maps-for-posn 'mode-line nil))) + (should-not (memq keymap (keymap-test--maps-for-posn 'mode-line "s"))) + (should-not (memq keymap (keymap-test--maps-for-posn nil "s"))) + (should (memq keymap (keymap-test--maps-for-posn nil nil))) + (let* ((mode-line-keymap (make-sparse-keymap "keymap-in-mode-line")) + (s (propertize "string" 'keymap mode-line-keymap))) + ;; Respect `keymap' in the string clicked on. + (should-not (memq keymap (keymap-test--maps-for-posn nil s))) + (should-not (memq keymap (keymap-test--maps-for-posn 'mode-line s))) + (should (memq mode-line-keymap (keymap-test--maps-for-posn nil s))) + (should (memq mode-line-keymap (keymap-test--maps-for-posn 'mode-line s))))))) + (provide 'keymap-tests) ;;; keymap-tests.el ends here commit 82f6c1651435aac656de7116511bf290bb0ef3e4 Author: Stefan Monnier Date: Tue Sep 9 17:42:20 2025 -0400 Allow use of \N{...} earlier to help fix bug#79353 * lisp/emacs-lisp/shorthands.el (hack-read-symbol-shorthands): Avoid inf-loops during bootstrap. E.g. this can occur while loading `uni-special-lowercase.el` where `hack-local-variables--find-variables` uses `downcase` which triggers loading `uni-special-lowercase.el`, ... * lisp/international/mule-cmds.el (ucs-names): Explicitly require `charprop`. * src/Makefile.in ($(lispsource)/loaddefs.el): Depend on `charprop`. diff --git a/lisp/emacs-lisp/shorthands.el b/lisp/emacs-lisp/shorthands.el index 413b9f816a0..33a302e500c 100644 --- a/lisp/emacs-lisp/shorthands.el +++ b/lisp/emacs-lisp/shorthands.el @@ -36,7 +36,11 @@ ;; detail of files.el. That function should be exported, ;; possibly be refactored into two parts, since we're only ;; interested in basic "Local Variables" parsing. - (alist-get 'read-symbol-shorthands (hack-local-variables--find-variables))) + ;; FIXME: Disable ourselves temporarily to avoid inf-loops during bootstrap, + ;; trying to look for shorthands in the files that implement shorthands. + (let ((hack-read-symbol-shorthands-function #'ignore)) + (alist-get 'read-symbol-shorthands + (hack-local-variables--find-variables)))) (setq hack-read-symbol-shorthands-function #'hack-read-symbol-shorthands) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 91822d1be04..b1ff5922c90 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -3125,6 +3125,7 @@ on encoding." (#xE0000 . #xE01FF))) (gc-cons-threshold (max gc-cons-threshold 10000000)) (names (make-hash-table :size 42943 :test #'equal))) + (require 'charprop) ;; Usually preloaded, but not during bootstrap. (dolist (range ranges) (let ((c (car range)) (end (cdr range))) diff --git a/src/Makefile.in b/src/Makefile.in index e4fc2fef711..a2f7ea011c3 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -948,7 +948,9 @@ NATIVE_COMPILATION_AOT = @NATIVE_COMPILATION_AOT@ endif ifneq ($(XCONFIGURE),android) -$(lispsource)/loaddefs.el: | bootstrap-emacs$(EXEEXT) $(bootstrap_pdmp) +$(lispsource)/loaddefs.el: | \ + bootstrap-emacs$(EXEEXT) $(bootstrap_pdmp) \ + $(lispsource)/international/charprop.el $(MAKE) -C ../lisp autoloads EMACS="$(bootstrap_exe)" endif commit d1221a427f67032f4adf81f02b377ce163413ca1 Author: Michael Albinus Date: Tue Sep 9 23:20:56 2025 +0200 Ignore non-existing or empty files in auth-sources * doc/misc/auth.texi: Replace @code{"..."} by @t{"..."}. (Help for users): Describe property lists format. Explain, that empty files in auth-sources are ignored when auth-source-ignore-empty-file is non-nil. (Help for developers): Add auth-source-creation-defaults to vindex. * etc/NEWS: Introduce auth-source-ignore-empty-file. Presentational fixes and improvements. * lisp/auth-source.el (auth-source-ignore-empty-file): New defcustom. (auth-source-backends-parser-file): Use it. (Bug#9113) * test/lisp/auth-source-tests.el (auth-source-validate-backend): Let-bind `auth-source-ignore-empty-file'. (auth-source-test-searches): Set file suffix. (auth-source-test-netrc-create-secret): Adapt test. diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index d1ebd971c3a..1307dcb5080 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -136,9 +136,9 @@ You can use spaces inside a password or other token by surrounding the token with either single or double quotes. You can use apostrophes inside a password or other token by -surrounding it with double quotes, e.g., @code{"he'llo"}. Similarly you +surrounding it with double quotes, e.g., @t{"he'llo"}. Similarly you can use double quotes inside a password or other token by surrounding -it with apostrophes, e.g., @code{'he"llo'}. You can't mix both (so a +it with apostrophes, e.g., @t{'he"llo'}. You can't mix both (so a password or other token can't have both apostrophes and double quotes). All this is optional. You could just say (but we don't recommend it, @@ -157,7 +157,7 @@ library encourages this confusion by accepting both, as you'll see later. If you have problems with the search, set @code{auth-source-debug} to -@code{'trivia} and see what host, port, and user the library is +@code{trivia} and see what host, port, and user the library is checking in the @file{*Messages*} buffer. Ditto for any other problems, your first step is always to see what's being checked. The second step, of course, is to write a blog entry about it and wait for @@ -267,16 +267,34 @@ earlier. Since Tramp has about 88 connection methods, this may be necessary if you have an unusual (see earlier comment on those) setup. @xref{Password handling, Password handling,, tramp, Tramp}. -The netrc format is directly translated into JSON, if you are into -that sort of thing. Just point to a JSON file with entries like this: +The netrc format is directly translated into JSON, if you are into that +sort of thing. Just point to a file which has the name extension +@file{.json} with entries like this: @example [ @{ "machine": "yourmachine.com", "port": "http", - "login": "testuser", "password": "testpass" @} + "login": "testuser", "password": "testpass" @} ] @end example +It is also possible to translate this into property lists, used in files +with name extension @file{.plist}. Its format is described in the +@file{plstore.el} library: + +@example +(("foo" :host "yourmachine.com" :port "http" + :user "testuser" :password "testpass")) +@end example + +@vindex auth-source-ignore-empty-file +File-based data stores are ignored in @code{auth-sources}, if the +underlying data file does not exist, or is empty. This is relevant, if +a new secret is stored in such a file; the first usable entry of +@code{auth-sources} is selected as target. If you want also empty or +not existing files to be selected, set the user option +@code{auth-source-ignore-empty-file} to @code{nil}. + @node Multiple GMail accounts with Gnus @chapter Multiple GMail accounts with Gnus @@ -335,12 +353,12 @@ sometimes called a @samp{keyring} or @samp{wallet} in GNOME Keyring and KDE Wallet but it's the same thing, a group of secrets. Collections are personal and protected so only the owner can open them. -The most common collection is called @code{"login"}. +The most common collection is called @t{"login"}. -A collection can have an alias. The alias @code{"default"} is +A collection can have an alias. The alias @t{"default"} is commonly used so the clients don't have to know the specific name of the collection they open. Other aliases are not supported yet. -Since aliases are globally accessible, set the @code{"default"} alias +Since aliases are globally accessible, set the @t{"default"} alias only when you're sure it's appropriate. @defun secrets-list-collections @@ -349,31 +367,31 @@ This function returns all the collection names as a list. @defun secrets-set-alias collection alias Set @var{alias} as alias of collection labeled @var{collection}. -Currently only the alias @code{"default"} is supported. +Currently only the alias @t{"default"} is supported. @end defun @defun secrets-get-alias alias Return the collection name @var{alias} is referencing to. -Currently only the alias @code{"default"} is supported. +Currently only the alias @t{"default"} is supported. @end defun Collections can be created and deleted by the functions @code{secrets-create-collection} and @code{secrets-delete-collection}. Usually, this is not done from within Emacs. Do not delete standard -collections such as @code{"login"}. +collections such as @t{"login"}. With GNOME Keyring, there exists a special collection called -@code{"session"}, which has the lifetime of the user being logged in. +@t{"session"}, which has the lifetime of the user being logged in. Its data is not stored on disk and goes away when the user logs out. Therefore, it can be used to store and retrieve secret items -temporarily. The @code{"session"} collection is better than a +temporarily. The @t{"session"} collection is better than a persistent collection when the secret items should not live -permanently. The @code{"session"} collection can be addressed either -by the string @code{"session"}, or by @code{nil}, whenever a +permanently. The @t{"session"} collection can be addressed either +by the string @t{"session"}, or by @code{nil}, whenever a collection parameter is needed. However, other Secret Service provider don't create this temporary -@code{"session"} collection. You must check first that this +@t{"session"} collection. You must check first that this collection exists, before you use it. @defun secrets-list-items collection @@ -451,12 +469,12 @@ in @code{secrets-create-item}. Example: The auth-source library uses the @file{secrets.el} library and thus the Secret Service API when you specify a source matching -@code{"secrets:COLLECTION"}. For instance, you could use -@code{"secrets:session"} to use the @code{"session"} collection, open only -for the lifetime of Emacs. Or you could use @code{"secrets:Login"} to -open the @code{"Login"} collection. As a special case, you can use the +@t{"secrets:@var{collection}"}. For instance, you could use +@t{"secrets:session"} to use the @t{"session"} collection, open only +for the lifetime of Emacs. Or you could use @t{"secrets:Login"} to +open the @t{"Login"} collection. As a special case, you can use the symbol @code{default} in @code{auth-sources} (not a string, but a -symbol) to specify the @code{"default"} alias. Here is a contrived +symbol) to specify the @t{"default"} alias. Here is a contrived example that sets @code{auth-sources} to search three collections and then fall back to @file{~/.authinfo.gpg}. @@ -578,7 +596,7 @@ expecting to query multiple backends uniformly, try flipping it to The auth-source library lets you control logging output easily. @defopt auth-source-debug -Set this user option to @code{'trivia} to see lots of output in +Set this user option to @code{trivia} to see lots of output in @file{*Messages*}, or set it to a function that behaves like @code{message} to do your own logging. @end defopt @@ -611,6 +629,7 @@ from Gnus's @code{nnimap.el}. nil))) @end example +@vindex auth-source-creation-defaults This call requires the user and password (secret) to be in the results. It also requests that an entry be created if it doesn't exist already. While the created entry is being assembled, the shown @@ -636,7 +655,7 @@ authentication information we just used, if it was newly created.'' After the first time it's called, the @code{:save-function} will not run again (but it will log something if you have set -@code{auth-source-debug} to @code{'trivia}). This is so it won't ask +@code{auth-source-debug} to @code{trivia}). This is so it won't ask the same question again, which is annoying. So the responsibility of the API user that specified @code{:create t} diff --git a/etc/NEWS b/etc/NEWS index e0c4f3cb871..4dc77f0e127 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -189,10 +189,10 @@ be updated as you type, or nil to suppress this always. Note that for large or inefficient completion tables this can slow down typing. --- -*** RET chooses the completion selected with M-/M- -If a completion candidate is selected with M- or M-, hitting -RET will exit completion with that as the result. This works both in -minibuffer completion and in-buffer completion. This supersedes +*** 'RET' chooses the completion selected with 'M-/M-'. +If a completion candidate is selected with 'M-' or 'M-', +hitting 'RET' will exit completion with that as the result. This works +both in minibuffer completion and in-buffer completion. This supersedes 'minibuffer-completion-auto-choose', which previously provided similar behavior; that variable is now nil by default. @@ -525,10 +525,10 @@ project. The value must be an alist where each element must be in the form: - (WHEN . PREDICATE) + (WHEN . PREDICATE) where WHEN specifies where the deletion will be performed, and PREDICATE -a function which takes one argument, and must return non-nil if the +is a function which takes one argument, and must return non-nil if the project should be removed. --- @@ -763,6 +763,17 @@ you could already use 'C-u C-x C-n' to clear the goal column. * Changes in Specialized Modes and Packages in Emacs 31.1 +** Auth Source + ++++ +*** Non-existing or empty files are ignored in 'auth-sources'. +File-based data stores are ignored in ‘auth-sources’, if the +underlying data file does not exist, or is empty. This is relevant, if +a new secret is stored in such a file; the first usable entry of +‘auth-sources’ is selected as target. If you want also empty or not +existing files to be selected, set the user option +‘auth-source-ignore-empty-file’ to nil. + ** Autoinsert +++ @@ -782,10 +793,12 @@ the default UI you get, i.e., when 'register-use-preview' is 'traditional'. +++ *** New user option 'treesit-enabled-modes'. -You can customize it either to t to enable all available ts-modes, -or to select a list of ts-modes to enable. Depending on customization, -it modifies the variable 'major-mode-remap-alist' from the corresponding -variable 'treesit-major-mode-remap-alist' prepared by ts-mode packages. +You can customize it either to t to enable all available tree-sitter +based modes, or to select a list of tree-sitter based modes to enable. +Depending on customization, it modifies the variable +'major-mode-remap-alist' from the corresponding variable +'treesit-major-mode-remap-alist' prepared by tree-sitter based mode +packages. *** New user option 'treesit-auto-install-grammar'. It controls the automatic installation of tree-sitter grammar libraries @@ -1003,9 +1016,9 @@ option controls how much is indented for method chaining. --- *** 'php-ts-mode' now depends on 'mhtml-ts-mode'. -The direct dependency on js-ts-mode, css-ts-mode and html-ts-mode has -now been replaced by ‘mhtml-ts-mode’. Navigation, Outline and Imenu -work for all languages and code maintenance is easier. +The direct dependency on 'js-ts-mode', 'css-ts-mode' and 'html-ts-mode' +has now been replaced by ‘mhtml-ts-mode’. Navigation, Outline and Imenu +work for all languages, and code maintenance is easier. --- *** 'php-ts-mode-run-php-webserver' can now accept a custom "php.ini" file. @@ -1016,7 +1029,7 @@ argument, 'php-ts-mode-run-php-webserver' prompts for the config file as well as for other connection parameters. --- -*** The option 'php-ts-mode-css-fontify-colors' has been removed. +*** The user option 'php-ts-mode-css-fontify-colors' has been removed. 'mhtml-ts-mode-css-fontify-colors' replaces this option. --- @@ -1040,8 +1053,8 @@ When non nil, it highlights unknown PHPDOC tags using --- *** New command 'php-ts-mode-show-ini'. -Show the location of the PHP ini files, if the buffer is associated to a remote -PHP file show the remote PHP ini files. +Show the location of the PHP ini files. If the current buffer is +associated to a remote PHP file, show the remote PHP ini files. ** Rust-ts mode @@ -1262,10 +1275,10 @@ If 'whitespace-style' includes 'missing-newline-at-eof' (which is the default), the 'whitespace-cleanup' function will now add the newline. --- -*** 'whitespace-mode' now can prettify page delimiter characters (^L). +*** 'whitespace-mode' now can prettify page delimiter characters ('^L'). If 'page-delimiters' is set in 'whitespace-style', or the new minor mode 'whitespace-page-delimiters-mode' is on, the page delimiter characters -(^L) are displayed as a pretty horizontal line that spans the entire +('^L') are displayed as a pretty horizontal line that spans the entire width of the window. The new 'whitespace-page-delimiter' face can be used to customize the appearence. @@ -2154,7 +2167,7 @@ statuses to files, and 'C-x v v' behaved subtly differently for the two statuses. The combination of these differences between backends and in 'C-x v v' behavior was confusing. Now, -- in VC-Dir, you can use 'C-x v v' on missing files to mark them as +- in VC Directory, you can use 'C-x v v' on missing files to mark them as removed - when committing, you can include missing files in a set of files with different statuses, just like you've always been able to include @@ -2259,7 +2272,7 @@ backend functions instead. These are jointly sufficient to support the *** Marking revisions in Log View now works more like other modes. Previously, 'm' toggled whether the current revision was marked, and didn't advance point. Now 'm' only adds marks, 'u' removes marks, and -both advance point, like how marking works in Dired and VC-Dir. +both advance point, like how marking works in Dired and VC Directory. You can get back the old behavior with something like this: (with-eval-after-load 'log-view @@ -2332,7 +2345,7 @@ packages. ** Rcirc +++ -*** Authentication via NickServ can access password from 'auth-source'. +*** Authentication via NickServ can access passwords with auth-source.el. For details, consult 'rcirc-authinfo'. ** Xref @@ -2559,10 +2572,10 @@ If non-nil, FFAP always finds remote files in buffers with remote 'default-directory'. If nil, FFAP finds local files first for absolute file names in above buffers. The default is nil. -** Debugging +** Edebug +++ -*** New command 'edebug-bounce-to-previous-value' (bound to 'P') +*** New command 'edebug-bounce-to-previous-value' (bound to 'P'). This command temporarily displays the outside current buffer with the outside point corresponding to the previous value, where the previous value is what Edebug has evaluated before its last stop point or what @@ -2603,7 +2616,7 @@ widths based on content, optimizing display space and readability. *** New user option 'elisp-flymake-byte-compile-executable'. This allows customizing the Emacs executable used for Flymake byte -compilation in emacs-lisp-mode. This option should be set when editing +compilation in 'emacs-lisp-mode'. This option should be set when editing Lisp code which will run with a different Emacs version than the running Emacs, such as code from an older or newer version of Emacs. This will provide more accurate warnings from byte compilation. @@ -2854,15 +2867,15 @@ on GNU/Linux systems. --- ** New variable 'tty-cursor-movement-use-TAB-BS'. -The display optimization where the combination TAB characters + -BACKSPACE is used to move to a position on a TTY frame is now disabled +The display optimization where the combination 'TAB' characters + +'BACKSPACE' is used to move to a position on a TTY frame is now disabled by default and controlled by this variable; it can be set to non-nil to keep the old behavior. This change is to accomodate screen readers. +++ ** A thread's current buffer can now be killed. -We introduce a new attribute for threads called buffer-disposition. +We introduce a new attribute for threads called 'buffer-disposition'. See the new argument in 'make-thread'. The default value allows the thread's current buffer to be killed by another thread. This does not apply to the main thread's buffer. diff --git a/lisp/auth-source.el b/lisp/auth-source.el index 320145798dc..f3506df7741 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -370,6 +370,16 @@ soon as a function returns non-nil.") :type 'ignore))) (auth-source-backend-parse-parameters entry backend))) +(defcustom auth-source-ignore-empty-file t + "If set non-nil, file-based backends with no data are ignored. +A backend is ignored, when the underlying file does not exist, or it is +empty. Consequently, no newly created entry is saved in an empty +backend when this user option is non-nil. + +Supported backend types are `netrc', `plstore' and `json'." + :version "31.1" + :type 'boolean) + (defun auth-source-backends-parser-file (entry) ;; take just a file name use it as a netrc/plist file ;; matching any user, host, and protocol @@ -384,26 +394,41 @@ soon as a function returns non-nil.") (extension (or (and (stringp source-without-gpg) (file-name-extension source-without-gpg)) ""))) - (when (stringp source) - (cond - ((equal extension "plist") - (auth-source-backend - :source source - :type 'plstore - :search-function #'auth-source-plstore-search - :create-function #'auth-source-plstore-create - :data (plstore-open source))) - ((member-ignore-case extension '("json")) - (auth-source-backend - :source source - :type 'json - :search-function #'auth-source-json-search)) - (t - (auth-source-backend - :source source - :type 'netrc - :search-function #'auth-source-netrc-search - :create-function #'auth-source-netrc-create)))))) + (if (and (stringp source) + (or (not auth-source-ignore-empty-file) + (and-let* + (;; File exists. + (attr (file-attributes source)) + ;; File isn't empty. + ((not (zerop (file-attribute-size attr)))))))) + (cond + ((equal extension "plist") + (auth-source-backend + :source source + :type 'plstore + :search-function #'auth-source-plstore-search + :create-function #'auth-source-plstore-create + :data (plstore-open source))) + ((member-ignore-case extension '("json")) + (auth-source-backend + :source source + :type 'json + :search-function #'auth-source-json-search)) + (t + (auth-source-backend + :source source + :type 'netrc + :search-function #'auth-source-netrc-search + :create-function #'auth-source-netrc-create))) + + (when auth-source-debug + (auth-source-do-warn + (concat "auth-source-backend-parse: " + "not existing or empty file, ignoring spec: %S") + entry)) + (auth-source-backend + :source "" + :type 'ignore)))) ;; Note this function should be last in the parser functions, so we add it first (add-hook 'auth-source-backend-parser-functions #'auth-source-backends-parser-file) diff --git a/test/lisp/auth-source-tests.el b/test/lisp/auth-source-tests.el index 584822e38f3..7ae337650f9 100644 --- a/test/lisp/auth-source-tests.el +++ b/test/lisp/auth-source-tests.el @@ -37,7 +37,8 @@ (type . ignore)))) (defun auth-source-validate-backend (source validation-alist) - (let ((backend (auth-source-backend-parse source))) + (let* (auth-source-ignore-empty-file + (backend (auth-source-backend-parse source))) (should (auth-source-backend-p backend)) (dolist (pair validation-alist) (should (equal (eieio-oref backend (car pair)) (cdr pair)))))) @@ -308,7 +309,7 @@ :host "b1" :port "b2" :user "b3") ))) (ert-with-temp-file netrc-file - :text (mapconcat 'identity entries "\n") + :suffix "auth-source-test" :text (mapconcat 'identity entries "\n") (let ((auth-sources (list netrc-file)) (auth-source-do-cache nil) found found-as-string) @@ -374,10 +375,13 @@ "%s@%s" (plist-get auth-info :user) (plist-get auth-info :host))))))) (ert-deftest auth-source-test-netrc-create-secret () + (ert-with-temp-file empty-file :suffix "auth-source-test" (ert-with-temp-file netrc-file :suffix "auth-source-test" - (let* ((auth-sources (list netrc-file)) + :text "machine a1 port a2 user a3 password a4" + (let* ((auth-sources (list empty-file netrc-file)) (auth-source-save-behavior t) + (auth-source-ignore-empty-file t) host auth-info auth-passwd) (dolist (passwd '("foo" "" nil)) ;; Redefine `read-*' in order to avoid interactive input. @@ -415,7 +419,7 @@ (string-equal (plist-get auth-info :user) (user-login-name))) (should (string-equal (plist-get auth-info :host) host)) (should (string-equal auth-passwd passwd)) - (should (search-forward host nil 'noerror))))))))) + (should (search-forward host nil 'noerror)))))))))) (ert-deftest auth-source-delete () (ert-with-temp-file netrc-file commit a2d4034242fc6289f73b16e343d850941c3e882c Author: Sean Whitton Date: Tue Sep 9 14:48:27 2025 +0100 ; * lisp/vc/vc-hg.el (vc-hg-diff): Pass `Hg' to vc-working-revision. diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index 2d633e07c1d..5c9df6bf287 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -556,7 +556,7 @@ This requires hg 4.4 or later, for the \"-L\" option of \"hg log\"." (defun vc-hg-diff (files &optional oldvers newvers buffer async) "Get a difference report using hg between two revisions of FILES." (let* ((firstfile (car files)) - (working (and firstfile (vc-working-revision firstfile)))) + (working (and firstfile (vc-working-revision firstfile 'Hg)))) (when (and (not newvers) (equal oldvers working)) (setq oldvers nil)) (when (and newvers (not oldvers)) commit ab83e15d8c24220d154676a98ee3bb504b9983c7 Author: Sean Whitton Date: Tue Sep 9 14:45:45 2025 +0100 ; * lisp/vc/vc-hg.el (vc-hg-diff): Tweak 'and' forms. diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index f2364424962..2d633e07c1d 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -557,9 +557,9 @@ This requires hg 4.4 or later, for the \"-L\" option of \"hg log\"." "Get a difference report using hg between two revisions of FILES." (let* ((firstfile (car files)) (working (and firstfile (vc-working-revision firstfile)))) - (when (and (equal oldvers working) (not newvers)) + (when (and (not newvers) (equal oldvers working)) (setq oldvers nil)) - (when (and (not oldvers) newvers) + (when (and newvers (not oldvers)) (setq oldvers working)) (apply #'vc-hg-command (or buffer "*vc-diff*") commit 2fafcdbf6ac686e723292f2c9c581de7e81bef7b Author: Eli Zaretskii Date: Tue Sep 9 15:18:16 2025 +0300 ; Minor copyedits in src/editfns.c * src/editfns.c (Fbuffer_string, Freplace_buffer_contents) (styled_format): Avoid using non-ASCII characters in doc strings and comments. diff --git a/src/editfns.c b/src/editfns.c index a3f220671a8..ea71c3cda37 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1693,7 +1693,7 @@ If narrowing is in effect, this function returns only the visible part of the buffer. This function copies the text properties of that part of the buffer -into the result string; if you don’t want the text properties, +into the result string; if you don't want the text properties, use `buffer-substring-no-properties' instead. */) (void) { @@ -2082,7 +2082,7 @@ nil. */) ptrdiff_t j = size_b; /* Walk backwards through the lists of changes. This was also cargo-culted from src/analyze.c in GNU Diffutils. Because we - walk backwards, we don’t have to keep the positions in sync. */ + walk backwards, we don't have to keep the positions in sync. */ while (i >= 0 || j >= 0) { rarely_quit (++ctx.quitcounter); @@ -3395,7 +3395,7 @@ usage: (format-message STRING &rest OBJECTS) */) return styled_format (nargs, args, true); } -/* Implement ‘format-message’ if MESSAGE is true, ‘format’ otherwise. */ +/* Implement `format-message' if MESSAGE is true, `format' otherwise. */ static Lisp_Object styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) commit 744216c0293b7cfad735e915237e4f25dd367722 Merge: 710d371eb7e 56cdb65e540 Author: Michael Albinus Date: Tue Sep 9 10:11:00 2025 +0200 Merge from origin/emacs-30 56cdb65e540 ; * doc/emacs/mini.texi (Minibuffer History): Fix typo. e65ebdf3290 ; Improve documentation of isearch ion minibuffer 6544372764d * doc/misc/tramp.texi (Password handling): Fix default of... 96d90403417 Fix auth-source.el doc commit 710d371eb7e0fe63ceee18ba4337312b92a295c1 Author: Lockywolf Date: Tue Sep 9 10:09:43 2025 +0200 Add convenience path/to/component target to tests/Makefile.in * test/Makefile.in (subdir_template): Add convenience targets. * test/README: Mention this. diff --git a/test/Makefile.in b/test/Makefile.in index 20505432e31..127f1cebbd7 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -262,6 +262,8 @@ define subdir_template $(patsubst %,check-%,$(subst /,-,$(wildcard $(1)/*-tests))) @${MAKE} check LOGFILES="$(patsubst %.el,%.log, \ $(patsubst $(srcdir)/%,%,$(wildcard ${srcdir}/$(1)/*.el)))" + .PHONY: $(1) + $(1): check-$(subst /,-,$(1)) endef $(foreach subdir, $(SUBDIRS), $(eval $(call subdir_template,$(subdir)))) diff --git a/test/README b/test/README index a4ddccae742..f86aca58cc1 100644 --- a/test/README +++ b/test/README @@ -49,9 +49,12 @@ following targets: * make check-all Like "make check", but run all tests. -* make check- +* make Like "make check", but run only the tests in test//*.el and - test//*-tests/*.el. is a relative directory path, + test//*-tests/*.el. + +* make check- + Like "make ", but is a relative directory path, which has replaced "/" by "-", like in "check-src" or "check-lisp-net". * make -or- make .log commit 56cdb65e54017b50ca994a5589cd31f36c44885b (refs/remotes/origin/emacs-30) Author: Robert Pluim Date: Mon Sep 8 15:14:04 2025 +0200 ; * doc/emacs/mini.texi (Minibuffer History): Fix typo. diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index 041e8243c95..e6fd68423c2 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -888,7 +888,7 @@ the regular expression makes the search case-sensitive (@pxref{Lax Search}). You can also search through the minibuffer history using incremental -search (@kbd{C-s} and @code{C-r}). @xref{Isearch Minibuffer}. +search (@kbd{C-s} and @kbd{C-r}). @xref{Isearch Minibuffer}. Emacs keeps separate history lists for several different kinds of arguments. For example, there is a list for file names, used by all commit e65ebdf32904514a9b99505ce4cb5ab1421dbc51 Author: Eli Zaretskii Date: Mon Sep 8 14:55:43 2025 +0300 ; Improve documentation of isearch ion minibuffer * doc/emacs/mini.texi (Minibuffer History): * doc/emacs/search.texi (Repeat Isearch, Isearch Minibuffer): Improve wording, cross-references, and indexing. (Bug#79395) diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index c1e9c22d450..041e8243c95 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -887,8 +887,8 @@ though they are invoked from the minibuffer. An upper-case letter in the regular expression makes the search case-sensitive (@pxref{Lax Search}). - You can also search through the history using an incremental search. -@xref{Isearch Minibuffer}. + You can also search through the minibuffer history using incremental +search (@kbd{C-s} and @code{C-r}). @xref{Isearch Minibuffer}. Emacs keeps separate history lists for several different kinds of arguments. For example, there is a list for file names, used by all diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index 788d91f78ba..6345b1b8988 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -160,8 +160,8 @@ matches that begin after it. @node Repeat Isearch @subsection Repeating Incremental Search -@kindex C-s @r{(Incremental Search)} -@kindex C-r @r{(Incremental Search)} +@kindex C-s @r{(repeating incremental search)} +@kindex C-r @r{(repeating incremental search)} @findex isearch-repeat-forward @findex isearch-repeat-backward Suppose you search forward for @samp{FOO} and find a match, but not @@ -660,26 +660,31 @@ but it applies only for certain motion command that have the @node Isearch Minibuffer @subsection Searching the Minibuffer @cindex minibuffer history, searching - -If you start an incremental search while the minibuffer is active, -Emacs searches the contents of the minibuffer. Unlike searching an -ordinary buffer, the search string is not shown in the echo area, -because that is used to display the minibuffer. - -If an incremental search fails in the minibuffer, it tries searching -the minibuffer history. @xref{Minibuffer History}. You can visualize -the minibuffer and its history as a series of pages, with the -earliest history element on the first page and the current minibuffer -on the last page. A forward search, @kbd{C-s}, searches forward to -later pages; a reverse search, @kbd{C-r}, searches backwards to -earlier pages. Like in ordinary buffer search, a failing search can -wrap around, going from the last page to the first page or vice versa. - -When the current match is on a history element, that history element -is pulled into the minibuffer. If you exit the incremental search -normally (e.g., by typing @key{RET}), it remains in the minibuffer -afterwards. Canceling the search, with @kbd{C-g}, restores the -contents of the minibuffer when you began the search. +@cindex incremental search in minibuffer history + +@kindex C-s @r{in minibuffer} +@kindex C-r @r{in minibuffer} +If you start an incremental search while the minibuffer is active, Emacs +searches the contents of the minibuffer, as in any other buffer. Unlike +searching an ordinary buffer, the search string is not shown in the echo +area, because that is used to display the minibuffer. + +If an incremental search in the minibuffer fails to find a match, it +tries searching the minibuffer history. @xref{Minibuffer History}. +Emacs pretends that the minibuffer and its history are a series of +pages, with the earliest history element on the first page and the +current minibuffer on the last page. A forward search, @kbd{C-s}, +searches forward to later pages; a reverse search, @kbd{C-r}, searches +backwards to earlier pages. Like in ordinary buffer search, a failing +search can wrap around, going from the last page to the first page or +vice versa. + +When an incremental search in the minibuffer finds a match that is part +of a history element, that history element is pulled into the minibuffer +and displayed. If you exit the incremental search normally (e.g., by +typing @key{RET}), it remains in the minibuffer afterwards. Canceling +the search, with @kbd{C-g}, restores the contents of the minibuffer to +what it was when you began the search. @node Nonincremental Search @section Nonincremental Search commit 6544372764d9bbec648440a1be3b6b63fc160bd9 Author: Michael Albinus Date: Sun Sep 7 16:08:09 2025 +0200 * doc/misc/tramp.texi (Password handling): Fix default of auth-sources. diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 280feb084d1..e63db40052e 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -2127,7 +2127,7 @@ the need. The package @file{auth-source.el}, originally developed for No Gnus, reads passwords from different sources, @xref{Help for users, , auth-source, auth}. The default authentication file is -@file{~/.authinfo.gpg}, but this can be changed via the user option +@file{~/.authinfo}, but this can be changed via the user option @code{auth-sources}. @noindent commit 96d90403417fbe417d5eb4c8a9d171a559d46c2b Author: Michael Albinus Date: Sun Sep 7 12:18:42 2025 +0200 Fix auth-source.el doc * doc/misc/auth.texi (Help for users): Change variables to user options where appropriate. Use setopt for them. Add Tramp link. Fix example. (Bug#9113) * lisp/auth-source.el (auth-sources): Add :link. diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index fe920997f1d..d1ebd971c3a 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -163,7 +163,7 @@ problems, your first step is always to see what's being checked. The second step, of course, is to write a blog entry about it and wait for the answer in the comments. -You can customize the variable @code{auth-sources}. The following may +You can customize the user option @code{auth-sources}. The following may be needed if you are using an older version of Emacs or if the auth-source library is not loaded for some other reason. @@ -172,29 +172,29 @@ auth-source library is not loaded for some other reason. (customize-variable 'auth-sources) ;; optional, do it once @end lisp -@defvar auth-sources +@defopt auth-sources -The @code{auth-sources} variable tells the auth-source library where +The @code{auth-sources} user option tells the auth-source library where your netrc files, Secret Service API collection items, or your password store live for a particular host and protocol. While you can get fancy, the default and simplest configuration is: @lisp ;;; old default: required :host and :port, not needed anymore -(setq auth-sources '((:source "~/.authinfo.gpg" :host t :port t))) +(setopt auth-sources '((:source "~/.authinfo.gpg" :host t :port t))) ;;; mostly equivalent (see below about fallbacks) but shorter: -(setq auth-sources '((:source "~/.authinfo.gpg"))) -;;; even shorter and the @emph{default}: -(setq auth-sources '("~/.authinfo.gpg" "~/.authinfo" "~/.netrc")) +(setopt auth-sources '((:source "~/.authinfo.gpg"))) +;;; even shorter: +(setopt auth-sources '("~/.authinfo.gpg")) ;;; use the Secrets API @var{Login} collection ;;; (@pxref{Secret Service API}) -(setq auth-sources '("secrets:Login")) +(setopt auth-sources '("secrets:Login")) ;;; use pass (@file{~/.password-store}) ;;; (@pxref{The Unix password store}) (auth-source-pass-enable) ;;; JSON data in format [@{ "machine": "SERVER", ;;; "login": "USER", "password": "PASSWORD" @}...] -(setq auth-sources '("~/.authinfo.json.gpg")) +(setopt auth-sources '("~/.authinfo.json.gpg")) @end lisp By adding multiple entries to @code{auth-sources} with a particular @@ -206,12 +206,12 @@ have unusual setups and the remaining 10% are @emph{really} unusual). Here's a mixed example using two sources: @lisp -(setq auth-sources '((:source (:secrets default) - :host "myserver" :user "joe") - "~/.authinfo.gpg")) +(setopt auth-sources '((:source (:secrets default) + :host "myserver" :user "joe") + "~/.authinfo.gpg")) @end lisp -@end defvar +@end defopt If you don't customize @code{auth-sources}, you'll have to live with the defaults: the unencrypted netrc file @file{~/.authinfo} will be @@ -265,6 +265,7 @@ Note that the port denotes the Tramp connection method. When you don't use a port entry, you match any Tramp method, as explained earlier. Since Tramp has about 88 connection methods, this may be necessary if you have an unusual (see earlier comment on those) setup. +@xref{Password handling, Password handling,, tramp, Tramp}. The netrc format is directly translated into JSON, if you are into that sort of thing. Just point to a JSON file with entries like this: @@ -285,9 +286,9 @@ names: @example (setq gnus-secondary-select-methods '((nnimap "gmail" - (nnimap-address "imap.gmail.com")) + (nnimap-address "imap.gmail.com")) (nnimap "gmail2" - (nnimap-address "imap.gmail.com")))) + (nnimap-address "imap.gmail.com")))) @end example Your netrc entries will then be: @@ -460,10 +461,10 @@ example that sets @code{auth-sources} to search three collections and then fall back to @file{~/.authinfo.gpg}. @example -(setq auth-sources '(default - "secrets:session" - "secrets:Login" - "~/.authinfo.gpg")) +(setopt auth-sources '(default + "secrets:session" + "secrets:Login" + "~/.authinfo.gpg")) @end example Attribute values in the auth-source spec, which are not strings (like @@ -477,7 +478,7 @@ functions. manager} (or just @samp{pass}) stores your passwords in @code{gpg}-protected files following the Unix philosophy. The store location (any directory) must be specified in the -@code{auth-source-pass-filename} variable which defaults to +@code{auth-source-pass-filename} user option which defaults to @file{~/.password-store}. Emacs integration of @samp{pass} follows the approach suggested by the @@ -503,7 +504,7 @@ host with an at-sign (@code{@@}). @item gnu.org:22.gpg The port (aka. service) to match can only be expressed after the host and separated with a colon (@code{:}). The separator can be changed -through the @code{auth-source-pass-port-separator} variable. +through the @code{auth-source-pass-port-separator} user option. @item gnu.org:22/rms.gpg @@ -544,17 +545,17 @@ library wrapping @samp{pass}; @uref{https://github.com/jabranham/helm-pass,,helm-pass}: helm interface for pass. @end itemize -@defvar auth-source-pass-filename -Set this variable to a string locating the password store on the disk. +@defopt auth-source-pass-filename +Set this user option to a string locating the password store on the disk. Defaults to @file{~/.password-store}. -@end defvar +@end defopt -@defvar auth-source-pass-port-separator -Set this variable to a string that should separate an host name from a +@defopt auth-source-pass-port-separator +Set this user option to a string that should separate an host name from a port in an entry. Defaults to @samp{:}. -@end defvar +@end defopt -@defvar auth-source-pass-extra-query-keywords +@defopt auth-source-pass-extra-query-keywords This expands the selection of available keywords to include @code{:max} and @code{:require} and tells more of them to accept a list of query parameters as an argument. When searching, it also @@ -569,18 +570,18 @@ matching against subdomain labels, keep this option set to @code{nil} of searches relative to other auth-source backends or encounter code expecting to query multiple backends uniformly, try flipping it to @code{t}. -@end defvar +@end defopt @node Help for developers @chapter Help for developers The auth-source library lets you control logging output easily. -@defvar auth-source-debug -Set this variable to @code{'trivia} to see lots of output in +@defopt auth-source-debug +Set this user option to @code{'trivia} to see lots of output in @file{*Messages*}, or set it to a function that behaves like @code{message} to do your own logging. -@end defvar +@end defopt The auth-source library only has a few functions for external use. @@ -671,7 +672,7 @@ record. @node GnuPG and EasyPG Assistant Configuration @appendix GnuPG and EasyPG Assistant Configuration -If the @code{auth-sources} variable contains @file{~/.authinfo.gpg} +If the @code{auth-sources} user option contains @file{~/.authinfo.gpg} before @file{~/.authinfo}, the auth-source library will try to read the GnuPG encrypted @file{.gpg} file first, before the unencrypted file. diff --git a/lisp/auth-source.el b/lisp/auth-source.el index c72cb24cf74..ff568e7a007 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -301,7 +301,8 @@ the choices can get pretty complex." (const :tag "Any" t) (string :tag "Name")))))) - (sexp :tag "A data structure (external provider)")))) + (sexp :tag "A data structure (external provider)"))) + :link '(custom-manual "(auth) Help for users")) (defcustom auth-source-gpg-encrypt-to t "List of recipient keys that `authinfo.gpg' encrypted to.