Subject: bug#58111: [PATCH] Add support for the Adlam script

From: समीर सिंह Sameer Singh <[email-masked]>
Date: Wed, 28 Sep 2022 11:55:10 +0530

>
> I see that you have now changed the hanifi-rohingya as well, but I'm
> not sure that does what you want.  Please consider the effect I
> described above, and decide whether you want 0 or 1 there.

You are right, adding 0 there results in incorrect composition, I have now
reverted my change.
Thanks

On Tue, Sep 27, 2022 at 10:06 PM Eli Zaretskii <[email-masked]> wrote:

> > From: समीर सिंह Sameer Singh <[email-masked]>
> > Date: Tue, 27 Sep 2022 21:23:40 +0530
> > Cc: [email-masked]
> >
> >  This doesn't look right: why 1 and not 0?
> >
> > I copied this from my hanifi-rohingya composition rules, where I do not
> remember
> > why I added 0 instead of 1. Even though they were working as intended I
> have replaced it with 0
> > there just to be safe.
>
> In hanifi-rohingya, the codepoints that triggered composition were
> between #x10D1D and #x10D27, whereas the regexp was
> "[\x10D00-\x10D27]+", which matches many more characters.  With 1 as
> the 2nd element of the rule vector, this means the sequence of
> characters U+10D00 U+10D00 will not cause composition, but the
> sequence U+10D00 U+10D1D will.  By contrast, in Adlam case, the
> characters that trigger composition and the regexp are identical, so I
> see no reason to trigger the composition only on the second character
> of a sequence.
>
> I see that you have now changed the hanifi-rohingya as well, but I'm
> not sure that does what you want.  Please consider the effect I
> described above, and decide whether you want 0 or 1 there.
>
From 73597b95e54f7b4bbc3065c18556d2677230a5ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E0=A4=B8=E0=A4=AE=E0=A5=80=E0=A4=B0=20=E0=A4=B8=E0=A4=BF?=
 =?UTF-8?q?=E0=A4=82=E0=A4=B9=20Sameer=20Singh?= <[email-masked]>
Date: Tue, 27 Sep 2022 16:44:28 +0530
Subject: [PATCH] Add support for the Adlam script (bug#58111)

* lisp/language/misc-lang.el ("Adlam"): New language environment.
Add composition rules for Adlam. Add sample text and input method.
* lisp/international/fontset.el (script-representative-chars):
Support Adlam.
* lisp/leim/quail/misc-lang.el ("adlam"): New input method.

* etc/HELLO: Add Adlam greeting.
* etc/NEWS: Announce the new language environment.
---
 etc/HELLO                     |  1 +
 etc/NEWS                      |  9 ++--
 lisp/international/fontset.el |  2 +-
 lisp/language/misc-lang.el    | 22 ++++++++
 lisp/leim/quail/misc-lang.el  | 97 +++++++++++++++++++++++++++++++++++
 5 files changed, 126 insertions(+), 5 deletions(-)

diff --git a/etc/HELLO b/etc/HELLO
index d73465318c..18c5ee5e54 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -24,6 +24,7 @@ Non-ASCII examples:
 
 LANGUAGE (NATIVE NAME)	HELLO
 ----------------------	-----
+Adlam (𞤀𞤣𞤤𞤢𞤥)	𞤅𞤢𞤤𞤢𞥄𞤥
 Amharic (አማርኛ)	ሠላም
 Arabic (العربيّة)	السّلام عليكم
 Armenian (հայերեն)	Բարև ձեզ
diff --git a/etc/NEWS b/etc/NEWS
index 99243481a0..99027744c6 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1229,10 +1229,10 @@ to edit such sequences by allowing point to "enter" the sequence.
 *** Support for many old scripts and writing systems.
 Emacs now supports and has language-environments and input methods for
 several dozens of old scripts that were used in the past for various
-languages in South and South-East Asia.  For each such script Emacs
-now has font-selection and character composition rules, a language
-environment, and an input method.  The newly-added scripts and the
-corresponding language environments are:
+languages.  For each such script Emacs now has font-selection and
+character composition rules, a language environment, and an input
+method.  The newly-added scripts and the corresponding language
+environments are:
 
 Tai Tham script and the Northern Thai language environment
 Brahmi script and language environment
@@ -1259,6 +1259,7 @@ Grantha script and language environment
 Kharoshthi script and language environment
 Lepcha script and language environment
 Meetei Mayek script and language environment
+Adlam script and language environment
 
 ---
 *** The "Oriya" language environment was renamed to "Odia".
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 99c7848704..65bc1b4024 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -295,7 +295,7 @@ font-encoding-charset-alist
 	(wancho #x1e2c0)
         (nag-mundari #x1E4D0 #x1E4EB #x1E4F0)
 	(mende-kikakui #x1E810)
-	(adlam #x1E900)
+	(adlam #x1E900 #x1E943)
 	(indic-siyaq-number #x1ec71)
 	(ottoman-siyaq-number #x1ed01)
 	(mahjong-tile #x1F000)
diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el
index 3d5b68f84b..bd1edb9185 100644
--- a/lisp/language/misc-lang.el
+++ b/lisp/language/misc-lang.el
@@ -269,6 +269,28 @@ egyptian-shape-grouping
                                   modifier "*")
                           1 'font-shape-gstring))))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Adlam
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(set-language-info-alist
+ "Adlam" '((charset unicode)
+           (coding-system utf-8)
+           (coding-priority utf-8)
+           (input-method . "adlam")
+           (sample-text . "Adlam (𞤀𞤣𞤤𞤢𞤥)	𞤅𞤢𞤤𞤢𞥄𞤥")
+           (documentation . "\
+Fulani language and its script Adlam are supported
+in this language environment.")))
+
+;; Adlam composition rules
+(set-char-table-range
+ composition-function-table
+ '(#x1E900 . #x1E95F)
+ (list (vector
+        "[\x1E900-\x1E95F]+"
+        0 'font-shape-gstring)))
+
 (provide 'misc-lang)
 
 ;;; misc-lang.el ends here
diff --git a/lisp/leim/quail/misc-lang.el b/lisp/leim/quail/misc-lang.el
index 0c4a0d4ce4..6bafa6b5fb 100644
--- a/lisp/leim/quail/misc-lang.el
+++ b/lisp/leim/quail/misc-lang.el
@@ -1180,5 +1180,102 @@
  (".||" ?𐩗)
  (".=" ?𐩘))
 
+(quail-define-package
+ "adlam" "Adlam" "𞤀" t "Adlam input method.
+
+ `\\=`' is used to switch levels instead of Alt-Gr.
+" nil t t t t nil nil nil nil nil t)
+
+(quail-define-rules
+ ("1"  ?𞥑)
+ ("`!" ?𞥞)
+ ("2"  ?𞥒)
+ ("3"  ?𞥓)
+ ("4"  ?𞥔)
+ ("5"  ?𞥕)
+ ("6"  ?𞥖)
+ ("7"  ?𞥗)
+ ("8"  ?𞥘)
+ ("9"  ?𞥙)
+ ("0"  ?𞥐)
+ ("q"  ?𞤹)
+ ("Q"  ?𞤗)
+ ("`q" ?𞥆)
+ ("w"  ?𞤱)
+ ("W"  ?𞤏)
+ ("`w" ?𞥈)
+ ("`W" ?𞥉)
+ ("e"  ?𞤫)
+ ("E"  ?𞤉)
+ ("`e" ?𞥅)
+ ("r"  ?𞤪)
+ ("R"  ?𞤈)
+ ("t"  ?𞤼)
+ ("T"  ?𞤚)
+ ("y"  ?𞤴)
+ ("Y"  ?𞤒)
+ ("`y" ?𞤰)
+ ("`Y" ?𞤎)
+ ("u"  ?𞤵)
+ ("U"  ?𞤓)
+ ("i"  ?𞤭)
+ ("I"  ?𞤋)
+ ("o"  ?𞤮)
+ ("O"  ?𞤌)
+ ("p"  ?𞤨)
+ ("P"  ?𞤆)
+ ("a"  ?𞤢)
+ ("A"  ?𞤀)
+ ("`a" ?𞥄)
+ ("s"  ?𞤧)
+ ("S"  ?𞤅)
+ ("`s" ?𞥃)
+ ("`S" ?𞤡)
+ ("d"  ?𞤣)
+ ("D"  ?𞤁)
+ ("`d" ?𞤯)
+ ("`D" ?𞤍)
+ ("f"  ?𞤬)
+ ("F"  ?𞤊)
+ ("g"  ?𞤺)
+ ("G"  ?𞤘)
+ ("`g" ?𞥀)
+ ("`G" ?𞤞)
+ ("h"  ?𞤸)
+ ("H"  ?𞤖)
+ ("`h" ?𞥇)
+ ("j"  ?𞤶)
+ ("J"  ?𞤔)
+ ("k"  ?𞤳)
+ ("K"  ?𞤑)
+ ("`k" ?𞤿)
+ ("`K" ?𞤝)
+ ("l"  ?𞤤)
+ ("L"  ?𞤂)
+ ("z"  ?𞥁)
+ ("Z"  ?𞤟)
+ ("`z" ?𞥂)
+ ("`Z" ?𞤠)
+ ("x"  ?𞤽)
+ ("X"  ?𞤛)
+ ("c"  ?𞤷)
+ ("C"  ?𞤕)
+ ("`c" #x200C) ; ZWNJ
+ ("v"  ?𞤾)
+ ("V"  ?𞤜)
+ ("`v" ?𞥊)
+ ("b"  ?𞤦)
+ ("B"  ?𞤄)
+ ("`b" ?𞤩)
+ ("`B" ?𞤇)
+ ("n"  ?𞤲)
+ ("N"  ?𞤐)
+ ("`n" ?𞤻)
+ ("`N" ?𞤙)
+ ("m"  ?𞤥)
+ ("M"  ?𞤃)
+ ("`m" ?𞥋)
+ ("`/" ?𞥟))
+
 (provide 'misc-lang)
 ;;; misc-lang.el ends here
-- 
2.37.3